2009-04-25 16 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) 
それを削除します
関連する問題