KnockoutJS将复选框可见性绑定到要检查的复选框或具有特定值

时间:2013-10-20 19:01:45

标签: javascript checkbox knockout.js

所以我有一个复选框,我正在尝试实现以下逻辑来设置可见性:

如果选中复选框或复选框的值低于指定的数字,请设置visible = true。

如果值超过测试值并且未选中复选框,则将其隐藏。

这是我到目前为止所做的:

<input type="checkbox" data-bind="visible: $data.Cost <= $root.itemLevel() - $root.totalEnchantLevelsUsed() || checked" />

我尝试了多种“检查”变体,包括将“已检查”更改为$ root.isChecked:

this.isChecked = ko.computed ( function (item) { 
  console.log('item', item); // PURELY TO TEST THE VALUE
}

但这告诉我'item'未定义。当我尝试显式传入$ data时,我收到一条关于ko.computed的错误消息,并且必须设置'write'访问权限。

有没有一种相对简单的方法可以做到这一点,我只是忽略了?不可否认,我对淘汰赛并不熟悉。

1 个答案:

答案 0 :(得分:1)

这与您尝试做的类似:http://jsfiddle.net/2aXrJ

HTML:

<div data-bind="foreach:items">
    <label data-bind="visible: isAllowedInWorkflow">
        <input data-bind="value: val" type="checkbox" />
        This checkbox has value
        <span data-bind="text:val"></span>
    </label>
</div>

JS:

ko.applyBindings({
    items: [createItem(10), createItem(20), createItem(30) ]
})

function createItem(val) {
    var  _item = {
         val: val
        ,isSelected: ko.observable(false)
    };
    _item.isAllowedInWorkflow = ko.computed(function() {
        //notice the order is importeant since you always want isSelected to be triggered for the 
        //computed to calculate its dependencies
        return !_item.isSelected() && val > 10; 
    });
    return _item;
}