所以我有一个复选框,我正在尝试实现以下逻辑来设置可见性:
如果选中复选框或复选框的值低于指定的数字,请设置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'访问权限。
有没有一种相对简单的方法可以做到这一点,我只是忽略了?不可否认,我对淘汰赛并不熟悉。
答案 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;
}