我有两个视图模型,我想要applybindings一个视图modek是Div特定的,另一个是整页
var profileModel = {
first: ko.observable("Bob"),
last: ko.observable("Smith")
};
var shellModel = {
header: ko.observable("Administration"),
sections: ["profile", "settings", "notifications"],
selectedSection: ko.observable()
};
ko.applyBindings(shellModel);
ko.applyBindings(profileModel, document.getElementById("profile"));
答案 0 :(得分:1)
您好@Jairam可以创建一个具有两个视图模型和applybindings到object的对象:
var profileModel = {
first: ko.observable("Bob"),
last: ko.observable("Smith")
};
var shellModel = {
header: ko.observable("Administration"),
sections: ["profile", "settings", "notifications"],
selectedSection: ko.observable()
};
var viewModel = {
subModelA: profileModel ,
subModelB: shellModel
};
ko.applyBindings(viewModel);
答案 1 :(得分:0)
您无法将ko.applyBindings(...)
调用到相同的父元素,甚至是同一父元素中的子元素。
当您致电ko.applyBindings(shellModel)
时,您将模型绑定到整个DOM,之后,您将在同一文档的子元素中启动其他绑定。
如果您想这样做,请将两个视图模型合并为一个并执行ko.applyBindings(mergedModel)
,它应该适用于您的方案。或者将ko.applyBindings(...)
shellModel
调用为一个不应该是profile
的父级的具体元素。
答案 2 :(得分:0)
你可以尝试这样的东西,它可以合并两个视图模型。类似于继承,viewmodel2继承了viewmodel1的所有属性。
function viewModel1() {
var self = this;
self.vm1Alert = function() {
alert('Model 1 stuff')
};
}
function viewModel2() {
var self = this;
viewModel1.call(self);
self.vm1Alert(); //from the first viewmodel
alert('Model 2 stuff');
}
ko.applyBindings(new viewModel2());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>