在淘汰赛js上执行一个不真实的检查绑定?

时间:2013-05-03 13:15:18

标签: javascript jquery knockout.js checked

我在knockout js中有一个输入类型复选框,我想在选中此复选框时执行“not true”操作。像这样:

<input type="checkbox" data-bind="checked: !IsVisible"/> 

但这不起作用。 我知道我可以调用IsHidden并设置常见的检查绑定,但我有一个特殊情况,我需要这种行为。

3 个答案:

答案 0 :(得分:5)

定义自定义绑定。请参阅“Simplifying and cleaning up views in KnockoutJS”,其中的部分与您要求的部分非常相似。基本上,这样的事情应该有效(注意:未经测试):

ko.bindingHandlers.notChecked = {
  update: function(element, valueAccessor) {
    var value = ko.utils.unwrapObservable(valueAccessor());
    ko.bindingHandlers.checked.update(element, function() { return!value; });
  }
};

然后你可以这样做:

data-bind="notChecked: IsVisible"

答案 1 :(得分:2)

您可以直接在绑定中评估observable,您的想法应该有效。

像这样:<input type="checkbox" data-bind="checked: !IsVisible()"/>

但请注意,这会失去“可观察性”,这可能不是您想要的。

另一种方法是创建一个由IsVisible计算的IsHidden属性。

var ViewModel = function (model) {
    var self = this;
    self.IsVisible = ko.observable(model.IsVisible);
    self.IsHidden = ko.computed({
        read: function () {
            return !self.IsVisible();
        },
        write: function (newValue) {
            self.IsVisible(!newValue);
        }
    });
}

See the Fiddle

答案 2 :(得分:0)

这是因为!你正在对observable执行一个函数。使用此:

<input type="checkbox" data-bind="checked: !IsVisible()"/>