如何从可观察数组内部的可观察数组中删除项目

时间:2019-05-10 09:53:23

标签: javascript knockout.js

如果ko.observableArray中有一个ko.observableArray,我如何从中删除项目,甚至选择该数组

1 个答案:

答案 0 :(得分:1)

通常,您用易于识别的东西包装数组。喜欢:

this.boxes = ko.observableArray([
  { id: 1, items: ko.observableArray([1, 2, 3]) },
  { id: 2, items: ko.observableArray([4, 5]) }
]);

如果您不想这样做,最好在包装数组之前保存对数组的引用:

const firstBox = ko.observableArray([1, 2, 3]);
const secondBox = ko.observableArray([4, 5]);

this.boxes = ko.observableArray([firstBox, secondBox]);
firstBox.remove(2);

请注意,此删除操作将不会触发boxes上的更新。

您还可以查找包含要删除的项目的数组。一旦有多个匹配项,您就必须决定要做什么...

this.boxes = ko.observableArray([
  ko.observableArray([1, 2, 3]),
  ko.observableArray([4, 5])
]);

const remove = x => {
  const inBoxes = this.boxes().filter(box => box().includes(x));
  if (inBoxes.length !== 1) // What to do here?
  else inBoxes[0].remove(x);
};

remove(2);