我想为我的页面刷新模型绑定。正如文档所述,我使用applyBindings方法。 另外,我需要在页面上使用少量viewModel。要做到这一点,我在绑定时使用object-wrapper +“with”关键字:
ko.applyBindings({ model1: {...}, model2: {...} });
<div data-bind="with: $root.model1"> ... </div>
<div data-bind="with: $root.model2"> ... </div>
它工作正常,直到我不使用动态绑定更新。如果我尝试在页面上添加其他视图模型,则它不起作用:(
几段代码:
1)工作正常:
$("#b1").click(function () {
ko.applyBindings({
myModel1: {
MyText: ko.observable("Some text")
},
myModel2: {
MyText: ko.observable("Some text")
}
});
});
$("#b2").click(function () {
ko.applyBindings({
myModel1: {
MyText: ko.observable("Some other text")
},
myModel2: {
MyText: ko.observable("Some other text 2")
}
});
});
2)不起作用:
$("#b1").click(function () {
ko.applyBindings({
myModel1: {
MyText: ko.observable("Some text")
}
});
});
$("#b2").click(function () {
ko.applyBindings({
myModel1: {
MyText: ko.observable("Some other text")
},
myModel2: {
MyText: ko.observable("Some other text 2")
}
});
});
据我了解,我们无法以这种方式绑定其他视图模型。我也尝试使用“ko.cleanNode()”方法,但它也不起作用。 存储在http://jsfiddle.net/eN8dq/2/
的完整代码示例您能否建议我如何在页面上添加其他视图模型?谢谢!
答案 0 :(得分:2)
尽量不强制绑定,但更改已绑定模型的值:
var viewModel = function () {
var self = this;
self.myModel1 = ko.observable( {
MyText: ko.observable("Some other text")
});
self.myModel2 = ko.observable({
MyText: ko.observable("Some other text 2")
});
self.clickAction = function() {
//do the trick of assigning value
self.myModel1 ({
MyText: ko.observable("Some another text")
});
};
};
ko.applyBindings(new viewModel());
答案 1 :(得分:1)
我针对此案例的解决方案:https://github.com/sergun/Knockout-MultiModels
有任何意见吗?