挖空点击绑定如何获取"current item"数组?


Short Example:
<div data-bind="foreach: firstArray">
  <span data-bind="text: title"></span>
  <input type="checkbox"  data-bind="click: $parent.delete"/>
</div>
<div data-bind="foreach: secArray">
  <span data-bind="text: title"></span>
  <input type="checkbox"  data-bind="click: $parent.delete"/>
</div>
 [...]
 self.firstArray = ko.observableArray([]);
 self.delete = function (item, event) {
        self.firstArray.remove(item);
 }
 [...]

问题:我有 2 个数组,它们都使用相同的函数,我想知道项目来自哪里(来自 first 或 secArray(。

你只需要将数组传递给你的删除函数。喜欢:

<div data-bind="foreach: firstArray">
  <span data-bind="text: title"></span>
  <input type="checkbox"  data-bind="click: $parent.delete.bind($data, $parent.firstArray)"/>
</div>

您的视图模型应该知道您传递了函数,并且this是您当前的项目。

self.firstArray = ko.observableArray([]);
self.delete = function (array) {
    array.remove(this);
}

您可以在此处阅读有关单击绑定的更多信息。它在那里说明了如何传递参数。

为什么你不有两个函数?

<div data-bind="foreach: firstArray">
  <span data-bind="text: title"></span>
  <input type="checkbox"  data-bind="click: $parent.deleteFromFirst"/>
</div>
<div data-bind="foreach: secArray">
  <span data-bind="text: title"></span>
  <input type="checkbox"  data-bind="click: $parent.deleteFromSecond"/>
</div>
 [...]
 self.firstArray = ko.observableArray([]);
 self.deleteFromFirst = function (item, event) {
        self.firstArray.remove(item);
 }
 self.secArray = ko.observableArray([]);
 self.deleteFromSecond = function (item, event) {
        self.secArray.remove(item);
 }
 [...]

最新更新