Knockout点击绑定如何获取“当前项目”的数组?

时间:2016-02-17 09:19:21

标签: javascript knockout.js

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个Arrays,它们都使用相同的功能,我想知道项目的来源(来自first或secArray)。

2 个答案:

答案 0 :(得分:2)

您只需将数组传递给删除功能即可。 像:

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

您的viewmodel应该知道您已通过该功能,而this是您当前的项目。

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

您可以阅读点击装订here的更多信息。它说明了如何传递参数。

答案 1 :(得分:1)

为什么你没有两个功能?

<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);
 }
 [...]