【问题标题】:Perform a not true checked binding on knockout js?对淘汰赛js执行​​不真实的检查绑定?
【发布时间】:2013-04-27 21:48:16
【问题描述】:

我在敲除JS中有一个输入类型复选框,并且在选中此复选框时,我会抱怨执行“不正确”操作。像这样的:

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

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

【问题讨论】:

  • 为了一个有趣的练习,我发布了一个问答问题,演示了一个通用的“非”绑定,它允许你像这样编写 html:&lt;input type="checkbox" data-bind="not: {checked: isVisible}" /&gt; (stackoverflow.com/q/16368784/91189)

标签: javascript jquery knockout.js checked


【解决方案1】:

定义自定义绑定。请参阅“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"

【讨论】:

    【解决方案2】:

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

    像这样:&lt;input type="checkbox" data-bind="checked: !IsVisible()"/&gt;

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

    另一种方法是创建一个根据 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

    【讨论】:

    • 没错,我不想失去这种可观察性
    【解决方案3】:

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

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

    【讨论】:

    • 啊,请阅读前面的答案,该答案正好说明了这一点。
    猜你喜欢
    • 2014-03-30
    • 2013-08-06
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 2013-12-27
    相关资源
    最近更新 更多