필터링 된 ArrayCollection에서 항목을 제거합니다
-
16-09-2019 - |
문제
필터 기능 세트가있는 ArrayCollection에서 getItemIndex를 호출 할 때 몇 가지 문제가 있습니다.
나는 같은 일을한다 myAC.removeItemAt(myAC.getItemIndex(myObject))
, 필터링이 적용되지 않았을 때 제대로 작동합니다. 필터링이 적용 되 자마자 GetItemIndex는 모든 경우 -1을 반환하는 것 같습니다.
누구든지 전에 이것을 접한 사람이 있습니까? 필터링 된 배열 컬렉션을 형성하는 항목을 제거하는 가장 좋은 방법은 무엇입니까?
정말 감사합니다.
에반
해결책
필터 필터가 정확히 무엇입니까? 모든 것을 걸러 내면 GetItemIndex가 -1을 반환해야합니다.
필터가 적용될 때 여전히 보이는 품목을 제거하기를 희망하십니까? 필터링 된 항목을 여전히 제거하려면 필터를 일시적으로 비활성화 할 수 있습니다.
var filter:Function = ac.filterFunction;
ac.fiterFunction = null;
ac.refresh();
// remove item
ac.filterFunction = filter;
ac.refresh();
다른 팁
ArrayCollection 내에 소스 객체가 있다는 것을 알게 될 것입니다. 당신이보고있는 것은 정렬 또는 필터가 적용된 기본 데이터의 관점입니다. 기본 소스 객체에서 삭제하고 싶습니다.
Flex의 ArrayCollections에서 항목 추가 및 제거를 처리 할 때마다 항상 원래 ArrayCollection의 사본을 보관했습니다. 항목의 추가 또는 제거는 해당 원본 사본에 발생합니다.
원본으로 변경되면 필터링 된 목록으로 전진합니다.
소스에서 직접 제거하십시오
arrayCollection.source.splice(i, 1)
예, 그래서 나는 객체의 속성을 제거하기 전에 물체의 속성을 필터링 한 것으로 바꾸고 있음을 알게되었습니다. 물론 나는이 경우 -1을 얻을 것이다. 내 실수.
결국 당신의 제안으로 가고, Stiggler. 이런 종류의 물건을 처리 할 수있는 덜 해킹 된 방법이 있어야하는 것처럼 보이지만 잘 작동하는 것 같습니다. 아마도 필터링되지 않은 컬렉션에 액세스 할 수있는 removeItemat로 전달할 수있는 매개 변수 일 것입니다.
어쨌든, 여러분의 답변에 감사드립니다. 매우 감사.