我正在使用Knockout 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
中的ViewModel,而是使用新的NewsFeedViewModel
。如何使这两个组件的datacontext绑定到存储在顶层组件(home)中的viewModel?
答案 0 :(得分: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>"
});
然后,您将定义以下元素:
<news-feed params="vm: newsFeedViewModel"></news-feed>
<news-feed params="vm: newsFeedViewModel2"></news-feed>
您可以选择直接为每个传递message
和/或选择对您的参数有意义的任何名称(而不是vm
)。