濾過のArrayCollectionから項目を除去すること
-
16-09-2019 - |
質問
filterFunctionのセットとのArrayCollectionにgetItemIndexを呼び出すときに、私はいくつかの問題を抱えています。
私はフィルタリングが適用されていない場合に正常に動作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();
他のヒント
私は、あなたがたArrayCollection内のソースオブジェクトがある見つけると思います。あなたが見ていると、適用されるソートやフィルタとの基礎となるデータの図です。あなたは本当に基本となるソースオブジェクトから削除したいです。
私はFlexでArrayCollectionsからのアイテムの追加や削除を扱ってきたときはいつでも、私は常に元のArrayCollectionのコピーを守ってきました。追加やアイテムの削除はいずれも、その元のコピーに起きます。
変更が元に行われていたら、私はフィルタリングされたリストに前方にそれらを移動します。
ソースから直接それを削除する
arrayCollection.source.splice(i, 1)
ええ、私は、私は、オブジェクトのプロパティを変更したことがわかりました。もちろん、私はなるだろう-1、その場合には。私のミスます。
あなたの提案、Stiggler一緒に行くことになりました。事のこのタイプを処理するために、以下ハック方法があるはずのように思えるが、正常に動作するようです。おそらく、パラメータは、あなたはフィルタリングされていないコレクションにアクセス聞かせするremoveItemAtに渡すことができます。
とにかく、あなたの応答のためのあなたの両方に感謝。感謝ます。