您需要限制绑定应用到 dom 的哪一部分。您可以在同一页面/文档上绑定多个视图模型,但它们不能重叠。因此,请指定一些 ID 并将绑定限制在页面的不同部分。
或者,您可以传递第二个参数来定义要在文档的哪个部分搜索数据绑定属性。例如,ko.applyBindings(myViewModel, document.getElementById('someElementId'))
。这将激活限制为 ID 为 someElementId 的元素及其后代,如果您希望拥有多个视图模型并将每个模型与页面的不同区域相关联,这将非常有用。
来自Knockout observables 文档
例子:
function AppViewModel1(Name) {
this.firstName = ko.observable(Name.fn);
this.lastName = ko.observable(Name.ln);
}
function AppViewModel2(Name) {
this.first = ko.observable(Name.fn);
this.last = ko.observable(Name.ln);
}
ko.applyBindings(new AppViewModel1({ fn : "yahoo", ln: ".in" }),
document.getElementById('gmailArea'));
ko.applyBindings(new AppViewModel2({ fn : "gmail", ln: ".com" }),
document.getElementById('yahooArea'));
如果您绝对必须在页面的相同部分访问相同的视图模型,那么您只需将它们全部合并到一个视图模型中。不漂亮,但 cest la vie。
例如
function AppViewModel1(Name) {
this.gmailFirstName = ko.observable(Name.gmailFn);
this.gmailLastName = ko.observable(Name.gmailLn);
this.yFirst = ko.observable(Name.yFn);
this.yLast = ko.observable(Name.yLn);
}
ko.applyBindings(new AppViewModel1({ gmailFn: "google", gmialLn: ".com", yFn : "yahoo", yLn: ".in" }));
我没有使用命名空间插件 jimmym 链接,但这听起来很有趣。