淘汰赛:将可观察数组绑定到点击绑定无法按预期工作
knockout: Binding observable array to click binding does not work as expected
如果我想从视图中删除可观察数组中的一个元素,我可能会这样做..
<div data-bind="foreach: records">
<input type="checkbox" data-bind="checked: isChecked, click: $parent.removeRow">
</div>
然后在我的 viewModel 中....
this.removeRow = function(item) { this.records.remove(item); }
按预期工作。
但是,我认为这是一个额外的步骤,为什么不尝试
click: $parent.records.remove
认为 $data
会被删除。那行不通,我得到 Uncaught TypeError: this.peek is not a function
我想可能是因为事件作为第二个参数传递,这可能会导致 remove()
出现问题,所以我尝试了:
click: _.unary($parent.records.remove)
_.unary returns 一个只接受一个参数的函数。这也不起作用,我得到了同样的 peek 错误。
它不会工作,因为当 click
绑定调用 remove
方法时,this
将不是 records
数组。
您可以使用绑定解决此问题:
click: $parent.records.remove.bind($parent.records)
在我看来,您在视图模型上使用专用 removeRow
函数的原始解决方案是更简洁的解决方案。
如果我想从视图中删除可观察数组中的一个元素,我可能会这样做..
<div data-bind="foreach: records">
<input type="checkbox" data-bind="checked: isChecked, click: $parent.removeRow">
</div>
然后在我的 viewModel 中....
this.removeRow = function(item) { this.records.remove(item); }
按预期工作。
但是,我认为这是一个额外的步骤,为什么不尝试
click: $parent.records.remove
认为 $data
会被删除。那行不通,我得到 Uncaught TypeError: this.peek is not a function
我想可能是因为事件作为第二个参数传递,这可能会导致 remove()
出现问题,所以我尝试了:
click: _.unary($parent.records.remove)
_.unary returns 一个只接受一个参数的函数。这也不起作用,我得到了同样的 peek 错误。
它不会工作,因为当 click
绑定调用 remove
方法时,this
将不是 records
数组。
您可以使用绑定解决此问题:
click: $parent.records.remove.bind($parent.records)
在我看来,您在视图模型上使用专用 removeRow
函数的原始解决方案是更简洁的解决方案。