5

녹아웃 3.2와 새 구성 요소 시스템을 사용하고 있습니다. 하위 구성 요소가 포함 된 구성 요소를 사용하려고합니다.녹아웃 3.2 구성 요소 데이터 컨텍스트

Home Page (component - with HomePageViewModel) NewsFeed1 (component with HomePageViewModel.NewsFeedViewModel1) NewsFeed2 (component with HomePageViewModel.NewsFeedViewModel2)

HomePageViewModel

var viewModel = (function() { 
    function viewModel() { 
     this.message = ko.observable("Welcome to DKT!"); 
     this.newsFeedViewModel = new gr.viewModel(); 
     this.newsFeedViewModel2 = new gr.viewModel(); 
     this.newsFeedViewModel.message("Message 1"); 
     this.newsFeedViewModel2.message("Message 2"); 
    } 
    return viewModel; 
})(); 

NewsFeedViewModel

var viewModel = (function() { 
    function viewModel() { 
     this.message = ko.observable("This is the profile!"); 
    } 
    return viewModel; 
})(); 

당신이 HomePageViewModel가 모두 NewsFeedViewModel를 포함 볼 수 있듯이. 지금은 두 가지 구성 요소의 DataContext/BindingContext로 사용할 수 있기를 원하지만 작동하지 않는 것 같습니다.

home.html을

<news-feed data-bind="newsFeedViewModel"></news-feed> 
<news-feed data-bind="newsFeedViewModel2"></news-feed> 

이 두 가지 구성 요소가 HomePageViewModel에서 ViewModels를 사용하지만 새로운 NewsFeedViewModel를 사용하지 않습니다. 어떻게 이러한 두 구성 요소의 datacontext를 상위 구성 요소 (집)에 저장된 viewModel에 바인딩 할 수 있습니까?

답변

4

일반적으로 구성 요소에 params을 통해 데이터를 제공하려고합니다. 당신이 좋아하는 요소를 정의하는 것, 그리고

ko.components.register("news-feed", { 
    viewModel: function (params) { 
     this.vm = params.vm; 
    }, 

    template: "<h2>News Feed</h2><div data-bind=\"text: vm.message\"></div>" 
}); 

: 예를 들어, 구조, 당신은 같은 구성 요소를 만들 수 있습니다 당신은 각각의 직접의 message을 통과하도록 선택할 수 있습니다

<news-feed params="vm: newsFeedViewModel"></news-feed> 

<news-feed params="vm: newsFeedViewModel2"></news-feed> 

및/(vm 대신) 매개 변수에 맞는 이름을 선택하십시오.

샘플 :

+0

http://jsfiddle.net/rniemeyer/fssXE/이 솔루션 주셔서 감사합니다, 나는 오늘 밤을 시도하고 게시물을 업데이트합니다. – user2465083

+0

이것은 완벽하게 작동합니다. 도와 주셔서 감사합니다 :) – user2465083

+0

안녕하세요, 다음 코드 http://jsfiddle.net/fssXE/3/을 (를) 살펴 보시기 바랍니다. viewModel에 함수를 추가하고 viewModel의 함수에 바인딩했습니다. 그런 시점에서 viewModel에서 데이터에 액세스하려고하면 항상 정의되지 않습니다. ViewModel의 함수에서 데이터에 액세스 할 수 없었습니다. – user2465083