你可以按照这个方向走几个方向。
一种选择是调用 ko.applyBindings 并针对单独的 DOM 元素使用不同的视图模型,例如:
var viewModelA = { name: "Bob" };
var viewModelB = { price: 50 };
ko.applyBindings(viewModelA, document.getElementById("aContainer"));
ko.applyBindings(viewModelB, document.getElementById("bContainer"));
http://jsfiddle.net/9abgxn8k/
在这种情况下,您需要确保元素不是彼此的祖先(不想绑定任何东西两次)
另一种选择是使用子视图模型:
var subModelA = { name: "Bob" };
var subModelB = { price: 50 };
var viewModel = {
subModelA: { name: "Bob" },
subModelB: { price: 50 }
};
ko.applyBindings(viewModel);
在此方法中,您将在要与每个视图模型一起显示的区域上使用with 绑定。您可以使用子模型或顶级模型上的标志来控制可见性。
我喜欢的另一个选择是给你的“观点”一点结构,然后做一些类似的事情:
var View = function(title, templateName, data) {
this.title = title;
this.templateName = templateName;
this.data = data;
};
var subModelA = {
items: ko.observableArray([
{ id: 1, name: "one" },
{ id: 2, name: "two" },
{ id: 3, name: "three" }
])
};
var subModelB = {
firstName: ko.observable("Bob"),
lastName: ko.observable("Smith")
};
var viewModel = {
views: ko.observableArray([
new View("one", "oneTmpl", subModelA),
new View("two", "twoTmpl", subModelB)
]),
selectedView: ko.observable()
};
ko.applyBindings(viewModel);
http://jsfiddle.net/rniemeyer/PctJz/