удаление элемента из отфильтрованной ArrayCollection

StackOverflow https://stackoverflow.com/questions/788156

  •  16-09-2019
  •  | 
  •  

Вопрос

У меня возникли некоторые проблемы при вызове getItemIndex для ArrayCollection с набором filterFunction.

Я делаю что-то вроде myAC.removeItemAt(myAC.getItemIndex(myObject)), который отлично работает, если фильтрация не применена.Как только применяется фильтрация, getItemIndex в каждом случае возвращает -1.

Кто-нибудь сталкивался с этим раньше?Как лучше всего удалить элемент из отфильтрованной коллекции ArrayCollection?

Большое спасибо.

Эван

Это было полезно?

Решение

Что именно отфильтровывает ваш фильтр?Если вы отфильтровали все, getItemIndex должен вернуть -1.

Вы надеетесь удалить элементы, которые все еще видны после применения фильтра?Если вы по-прежнему хотите удалить отфильтрованный элемент, вы можете временно отключить фильтр:

var filter:Function = ac.filterFunction;
ac.fiterFunction = null;
ac.refresh();

// remove item

ac.filterFunction = filter;
ac.refresh();

Другие советы

Я думаю, вы обнаружите, что в ArrayCollection есть исходный объект.То, что вы видите, — это представление базовых данных с примененной сортировкой или фильтром.Вы действительно хотите удалить базовый исходный объект.

Каждый раз, когда мне приходилось добавлять и удалять элементы из ArrayCollection во Flex, я всегда сохранял копию исходного ArrayCollection.Любое добавление или удаление элементов происходит с этой исходной копией.

После внесения изменений в оригинал я перемещаю их в отфильтрованный список.

Удалить его из источника напрямую

arrayCollection.source.splice(i, 1)

Да, поэтому я обнаружил, что менял свойство объекта на такое, которое его отфильтровывало, прежде чем попытаться удалить его.Конечно, в этом случае я бы получил -1.Виноват.

В итоге согласился с твоим предложением, Стиглер.Кажется, работает нормально, хотя кажется, что должен быть менее хакерский способ справиться с подобными вещами.Возможно, вы могли бы передать параметр RemoveItemAt, который позволил бы вам получить доступ к нефильтрованной коллекции.

В любом случае, спасибо вам обоим за ваши ответы.Очень признателен.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top