淘汰赛:将可观察数组绑定到点击绑定无法按预期工作

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 函数的原始解决方案是更简洁的解决方案。