我在使用filterFunction設置的ArrayCollection上調用getItemIndex時遇到了一些問題。從已過濾的ArrayCollection中移除一個項目
我做了一些像myAC.removeItemAt(myAC.getItemIndex(myObject))
,這在過濾未被應用時工作正常。只要應用過濾,getItemIndex在每種情況下都會返回-1。
有沒有人遇到過這個?從過濾的ArrayCollection中移除項目的最佳方式是什麼?
非常感謝。
埃文
我在使用filterFunction設置的ArrayCollection上調用getItemIndex時遇到了一些問題。從已過濾的ArrayCollection中移除一個項目
我做了一些像myAC.removeItemAt(myAC.getItemIndex(myObject))
,這在過濾未被應用時工作正常。只要應用過濾,getItemIndex在每種情況下都會返回-1。
有沒有人遇到過這個?從過濾的ArrayCollection中移除項目的最佳方式是什麼?
非常感謝。
埃文
什麼是你的過濾器過濾掉?如果你已經過濾了所有的東西,getItemIndex應該返回-1。
您是否希望刪除在應用過濾器時仍可見的項目?如果你還是想刪除會篩選出的項目,你可以暫時禁用過濾:
var filter:Function = ac.filterFunction;
ac.fiterFunction = null;
ac.refresh();
// remove item
ac.filterFunction = filter;
ac.refresh();
任何時候,我已經處理了添加和Flex中去除ArrayCollections項目,我一直保持着原始的ArrayCollection的副本。任何添加或刪除項目發生在原始副本。
一旦對原件進行了更改,我將這些更改轉移到已過濾的列表。
是啊,所以我也發現,我正在改變對象的屬性 - 這本來是過濾的一個在嘗試將其刪除之前。當然,在這種情況下我會得到-1。我的錯。
結束了你的建議,Stiggler。似乎工作正常,但似乎應該有一個不太冒犯的方式來處理這種類型的事情。也許你可以傳遞給removeItemAt的參數讓你訪問未經過濾的集合。
無論如何,感謝你們兩位的迴應。非常感激。
我想你會發現ArrayCollection內有一個源對象。您所看到的是應用排序或過濾器的基礎數據視圖。你真的想從基礎的源對象中刪除。
從源直接
arrayCollection.source.splice(i, 1)
刪除它