2009-04-25 7 views
2

filterFunction 세트로 ArrayCollection에서 getItemIndex를 호출 할 때 몇 가지 문제가 있습니다.필터링 된 ArrayCollection에서 항목 제거

나는 필터링이 적용되지 않았을 때 잘 작동하는 myAC.removeItemAt(myAC.getItemIndex(myObject))과 같은 작업을 수행합니다. 필터링이 적용되면 getItemIndex는 모든 경우에 -1을 반환합니다.

이전에이 문제가 발생 했습니까? 항목을 제거하는 가장 좋은 방법은 필터링 된 ArrayCollection을 형성하는 것입니다.

고마워요.

은 에반

답변

4

필터가 정확히 필터링되는 것은 무엇입니까? 모든 것을 필터링하면 getItemIndex가 -1을 반환해야합니다.

필터를 적용해도 여전히 표시되는 항목을 제거하고 싶습니까? 당신은 여전히 ​​필터링 된 항목을 제거하려는 경우, 당신은 일시적으로 필터를 비활성화 할 수 있습니다 :

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

// remove item 

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

내가 추가하고 플렉스에 ArrayCollections에서 항목을 제거하는 처리 한 때마다, 나는 항상 원래의 ArrayCollection의 사본을 보관했습니다. 항목의 추가 또는 제거는 원본 사본에서 발생합니다.

원본이 변경되면 필터링 된 목록으로 이동합니다.

0

네를, 그래서 내가 개체의 특성 변화하는 것을 알게 되었습니까 - 그것은 필터링 것 하나를 제거하기 전에 제거하십시오. 물론 나는 그 경우에 -1을 얻을 것이다. 내 실수.

제안과 함께 끝나면, Stiggler. 이 유형의 것을 처리하는 데 덜 익숙한 방법이 있어야하는 것 같지만 그래도 잘 작동하는 것 같습니다. 필터되지 않은 컬렉션에 액세스 할 수있는 removeItemAt에 전달할 수있는 매개 변수 일 수 있습니다.

어쨌든 두 분 모두 답장을 보내 주셔서 감사합니다. 매우 감사.

4

ArrayCollection 내에 소스 객체가 있다는 것을 알게 될 것입니다. 보고있는 것은 정렬이나 필터가 적용된 기본 데이터를 보는 것입니다. 정말로 기본 소스 객체에서 삭제하고 싶습니다.

0

은 직접 소스

arrayCollection.source.splice(i, 1) 
에서 제거