удаление элемента из отфильтрованной ArrayCollection
-
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, который позволил бы вам получить доступ к нефильтрованной коллекции.
В любом случае, спасибо вам обоим за ваши ответы.Очень признателен.