加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-4 – 为一个页面使用两个Knockout视图模型

发布时间:2020-12-16 07:33:07 所属栏目:asp.Net 来源:网络整理
导读:我在淘汰赛中设置了两个视图模型. $.getJSON("/api/administrators",function (data) { var AccessViewModel = { administrators: ko.observableArray(data) }; ko.applyBindings(AccessViewModel);});$.getJSON("/api/roles",function (data) { var RolesVi
我在淘汰赛中设置了两个视图模型.

$.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>

有人能指出我正确的方向吗?

解决方法

每个部分只能调用一次ko.applyBindings.如果未传递第二个参数,则该部分是整个页面.如果你有一个特定的部分,比如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);
});

请记住,因为ko.applyBindings只需要调用一次,所以应该尽早完成.由于几个原因,从ajax方法调用它通常是一个坏主意.一,ajax方法不再可以作为更新调用重用;另外,其他页面功能必须等到ajax方法返回才能开始工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读