javascript - 从 knockoutjs 模型更改可观察值

标签 javascript jquery knockout.js

我觉得这很简单... 我有一个像这样的 knockoutjs View 模型:

UserModel = function(user) {
    // ...
    this.Permissions = new PermissionsModel(user.Permissions);
    this.fullAccessValue = ko.observable(false);


    // if the permissions change
    $.each(self.Permissions, function(i, item) {
        item.subscribe(function() {
            if (self.allStoresSelected() && self.allPermissionsSelected()) {
                userModel.fullAccessValue = ko.observable(true);
                $('#savFullAccessCheck').prop('checked', true);
            } else {
                userModel.fullAccessValue = ko.observable(false);
                $('#savFullAccessCheck').prop('checked', false);
            }
        });
     });

};

我要做的事:
我有一个带有复选框(权限)和另一个复选框(完全访问权限)的列表。 现在,当选中所有权限复选框时,必须选中完全访问权限。 如果没有全部勾选,则 fullAccess 必须取消勾选。

否则,当我选中 fullAccess 复选框时,必须选中所有其他复选框。

复选框的权限如下所示:

var PermissionsModel = function(permissions) {
    var self = this;
    self.Access1 = ko.observable(permissions.Access1);
    self.Access2 = ko.observable(permissions.Access1);
    // ...
};


userModel = new UserModel();
ko.applyBindings(userModel, $('#savBottomWrap')[0]);

简而言之:我的问题是如何使用 javascript 更新可观察值!?

这实际上行不通:

userModel.fullAccessValue = ko.observable(false);
$('#savFullAccessCheck').prop('checked', false);

最佳答案

我帮助了另一个人,你需要使用计算

http://jsfiddle.net/AneL9/

self.SelectAll = ko.computed({
    read: function() {
        var item = ko.utils.arrayFirst(self.People(), function(item) {
            return !item.Selected();
        });
        return item == null;           
    },
    write: function(value) {
        ko.utils.arrayForEach(self.People(), function (person) {
            person.Selected(value);
        });
    }
});

knockoutjs deselect/select all checkboxes when one or more items deselected

关于javascript - 从 knockoutjs 模型更改可观察值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26627223/

相关文章:

javascript - 为什么这段代码不会在浏览器中提示一次?

javascript - 如何向模板元素添加不同的类?

javascript - 我在哪里可以获得离线 jQuery 1.7 API 转储

javascript - Node JS - 在 Jade 中扩展布局时出错

javascript - JQuery 事件在动态内容中重复

javascript - 按住鼠标连续增加值

javascript - 无法获得 interact.js 拖放交互以使用 Bootstrap 元素

javascript - knockout 对象绑定(bind)

knockout.js - 没有模板的 knockout 绑定(bind)到数组元素只能以一种方式工作

javascript - 通过 Knockout.js 在剑道网格中使用可编辑单元格