我尝试根据observableArray
的内容启用/禁用按钮。
如果数组包含至少一个元素,则必须启用该按钮。
使用复选框列表上的click
绑定填充数组,以便在选中复选框后将项目添加到数组中(并在取消选中时删除)。
调试显示阵列已正确填充,因为我打印了它的长度,按钮仍然无法改变它的状态。
这里有一些代码:
<input type="checkbox" data-bind="click: $root.changeCheckboxState" />
...
<button class="btn btn-primary" data-bind="enable: list().length > 0">TEST BUTTON</button>
...
vm.list = ko.observableArray([]);
vm.changeCheckboxState = function (item){
// if list contains the item we remove it, otherwise we add it
console.log(vm.list().length); // prints values higher than 0
}
我还尝试使用返回vm.list().length
的计算,但没有任何反应。
我做错了什么?
答案 0 :(得分:0)
可观察数组是常规数组的包装,可添加依赖关系跟踪。为了让淘汰赛能够通知订阅者任何更新,您需要确保:
observableArray
实例执行所有更新,并保持常规数组不变,或说你有这个片段:
var myArray = [ 1, 2, 3 ];
var obsArray = ko.observableArray(myArray);
var obsArray.subscribe(function(innerArray) {
console.log(innerArray);
});
不要做什么:
Knockout无法神奇地感知myArray
myArray.push(4); // Won't log
myArray.splice(2, 1); // Won't log
的工作:
使用observableArray
中提供的方法:
obsArray.push(4); // Will log [ 1, 2, 3, 4 ]
obsArray.remove(3); // Will log [ 1, 2, 4 ]
使用remove
时,淘汰赛会为您做什么:
myArray
by calling peek
on the observable one <强>要点:强>
Knockout的可观察数组方法在变异引用数组时调用valueHasMutated
,从而更新所有依赖项,例如enable
绑定。