更改knockoutjs模型的可观察值

change observable value from knockoutjs model

本文关键字:观察 knockoutjs 模型 更改      更新时间:2023-09-26

我认为这是一件容易的事情。。。我有一个类似于这样的knockoutjs视图模型:

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取消选择/选择所有复选框

如果在这里实现

userModel.fullAccessValue = ko.observable(false);

比你能得到的价值如下:

userModel.fullAccessValue(true);

编辑:您应该将该值绑定到类似的复选框

<input type="checkbox" checked="data-bind: userModel.fullAccessValue">