我在淘汰赛中设置了两个视图模型。
$.getJSON("/api/administrators", function (data) {
var AccessViewModel = {
administrators: ko.observableArray(data)
};
ko.applyBindings(AccessViewModel);
});
$.getJSON("/api/roles", function (data) {
var RolesViewModel = {
definedRoles: ko.observableArray(data)
};
ko.applyBindings(RolesViewModel);
});
我能够从视图中的管理员那里获取信息,但无法从定义的角色中提取任何内容。 当我在角色的.getJSON函数内添加警报时,它返回数据。在创建RolesViewModel和我这样调用之间似乎有问题:
<ul data-bind="foreach: definedRoles">
<li data-bind="text: name"></li>
</ul>
有人能指出我正确的方向吗?
答案 0 :(得分:8)
ko.applyBindings
每个部分只能调用一次。如果未传递第二个参数,则该部分是整个页面。如果您有特定的部分,例如DIV
,则应将其作为第二个参数传递。
或者,您可以为页面创建一个viewmodel,并为两个列表创建一个属性,然后将页面绑定到此单个viewmodel。我推荐这种方法。该代码可能如下所示:
var ViewModel = function() {
this.administrators = ko.observableArray([]);
this.definedRoles = ko.observableArray([]);
};
var vm = new ViewModel();
ko.applyBindings(vm);
$.getJSON("/api/administrators", function (data) {
vm.administratos(data);
});
$.getJSON("/api/roles", function (data) {
vm.definedRoles(data);
});
请记住,由于ko.applyBindings
只需要调用一次,因此您应该尽早进行调用。由于几个原因,从ajax方法调用它通常是一个坏主意。一,ajax方法不再可以作为更新调用重用;另外,其他页面功能必须等到ajax方法返回才能开始工作。
答案 1 :(得分:7)
Tyrsius答案是正确的,但为了将来参考,您可以将两个不同的视图模型绑定到同一页面。您必须绑定模型,如
ko.applyBindings(wallView,$("#WallKo")[0]);
并使用选择Id的div包装html,即
<div id = "WallKo">
<div data-bind="foreach:posts">
.....
</div>
</div>
然后,您可以为每个页面提供任意数量的视图模型。
答案 2 :(得分:0)
感谢HOW将模型绑定到特定div的示例。非常有帮助