문제

필터 기능 세트가있는 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로 전달할 수있는 매개 변수 일 것입니다.

어쨌든, 여러분의 답변에 감사드립니다. 매우 감사.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top