удаление элемента из отфильтрованной коллекции ArrayCollection - PullRequest
2 голосов
/ 25 апреля 2009

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

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

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

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

Evan

Ответы [ 5 ]

4 голосов
/ 26 апреля 2009

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

4 голосов
/ 25 апреля 2009

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

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

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

// remove item

ac.filterFunction = filter;
ac.refresh();
0 голосов
/ 18 мая 2012

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

arrayCollection.source.splice(i, 1)
0 голосов
/ 26 апреля 2009

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

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

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

0 голосов
/ 25 апреля 2009

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

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

...