rro*_*oss 4 asp.net-mvc-4 knockout.js knockout-mvc
我在淘汰赛中设置了两个视图模型.
$.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);
});
Run Code Online (Sandbox Code Playgroud)
我能够从视图中的管理员那里获取信息,但无法从定义的角色中提取任何内容.当我在角色的.getJSON函数内添加警报时,它返回数据.在创建RolesViewModel和我这样调用它时似乎有问题:
<ul data-bind="foreach: definedRoles">
<li data-bind="text: name"></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
有人能指出我正确的方向吗?
ko.applyBindings
每个部分只能调用一次.如果未传递第二个参数,则该部分是整个页面.如果你有一个特定的部分,比如a DIV
,你应该把它作为第二个参数传入.
或者,您可以为页面创建一个视图模型,并为两个列表创建一个属性,然后将页面绑定到此单个视图模型.我推荐这种方法.该代码可能如下所示:
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);
});
Run Code Online (Sandbox Code Playgroud)
请记住,因为ko.applyBindings
只需要调用一次,您应该尽早完成.由于几个原因,从ajax方法调用它通常是一个坏主意.一,ajax方法不再可以作为更新调用重用; 另外,其他页面功能必须等到ajax方法返回才能开始工作.
Tyrsius的答案是正确的,但为了将来参考,您可以将两个不同的视图模型绑定到同一页面.你必须绑定模型
ko.applyBindings(wallView,$("#WallKo")[0]);
Run Code Online (Sandbox Code Playgroud)
并使用选择了Id的div包装html
<div id = "WallKo">
<div data-bind="foreach:posts">
.....
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
然后,您可以为每个页面提供任意数量的视图模型.
归档时间: |
|
查看次数: |
3207 次 |
最近记录: |