【发布时间】:2017-10-17 00:12:30
【问题描述】:
我正在尝试根据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 的计算,但没有任何反应。
我做错了什么?
【问题讨论】:
-
你是如何修改你的 observable 数组的?如果您使用
vm.list.push和vm.list.remove,enable绑定应该更新。 然而,如果你只是修改inner数组(例如:vm.list().splice),knout不会自动更新所有依赖,你必须手动触发@ 987654330@。最后,确保在复选框上使用checked绑定而不是click绑定。 -
我正在使用
click,因为我正在跟踪我的复选框中的更改,其中一些可能已经被选中。通过click事件,我将项目添加到修改后的项目中(或者如果它已经存在,则将其删除,因为它正在恢复到原来的状态)。使用remove有效,如果您将其作为答案发布,我会接受。 -
您能否在jsFiddle 中重现该问题?可能有助于确定问题。
标签: javascript arrays knockout.js