【问题标题】:change observable value from knockoutjs model从 knockoutjs 模型更改可观察值
【发布时间】:2014-12-24 23:20:45
【问题描述】:

我认为这是一件容易的事... 我有一个像这样的 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。

否则,当我选中 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);

【问题讨论】:

    标签: javascript jquery knockout.js


    【解决方案1】:

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

    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

    【讨论】:

      【解决方案2】:

      如果在这里实现

      userModel.fullAccessValue = ko.observable(false);
      

      你可以像下面这样改变价值:

      userModel.fullAccessValue(true);
      

      编辑: 你应该把这个值绑定到这样的复选框

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

      【讨论】:

        猜你喜欢
        • 2015-09-18
        • 2012-07-16
        • 2013-12-16
        • 2012-11-02
        • 2012-04-20
        • 2017-02-19
        • 1970-01-01
        • 1970-01-01
        • 2016-07-19
        相关资源
        最近更新 更多