2009-04-25 46 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

任何時候,我已經處理了添加和Flex中去除ArrayCollections項目,我一直保持着原始的ArrayCollection的副本。任何添加或刪除項目發生在原始副本。

一旦對原件進行了更改,我將這些更改轉移到已過濾的列表。

0

是啊,所以我也發現,我正在改變對象的屬性 - 這本來是過濾的一個在嘗試將其刪除之前。當然,在這種情況下我會得到-1。我的錯。

結束了你的建議,Stiggler。似乎工作正常,但似乎應該有一個不太冒犯的方式來處理這種類型的事情。也許你可以傳遞給removeItemAt的參數讓你訪問未經過濾的集合。

無論如何,感謝你們兩位的迴應。非常感激。

4

我想你會發現ArrayCollection內有一個源對象。您所看到的是應用排序或過濾器的基礎數據視圖。你真的想從基礎的源對象中刪除。

0

從源直接

arrayCollection.source.splice(i, 1) 
刪除它
相關問題