flexでは、dataProvider ( ListCollectionView )から特定のアイテム (selectedItem フィールド) を表示するコンポーネントを使用しています。
私の dataProvider の要素は、さまざまな方法で編集できます。編集されるたびに更新イベントが送信され、dataProvider コレクション (ListCollectionView:: listChangeHandler ) が更新されます。
その過程で、selectedItem が編集された要素である場合、編集されたフィールドがどこにも使用されていなくても、削除されます ( ListCollectionView:: moveItemInViewを介して null に設定されます)。
これを回避する方法はありますか?
より具体的には、以前に保存する必要がなく、紛失して後で復元する必要がありません(ここではほとんど実用的ではありません)。
編集: わかりました、さらに説明できると思います:
私のコードでは、dataProvider にデータバインドされているリストの項目の 1 つのプロパティに影響を与えます。正確な理由はわかりませんが、おそらくアイテムのクラスが [bindable] であるため、これにより更新イベントがスローされます。
このイベントは、ListCollectionView::listChangeHandler にディスパッチする ArrayList::itemUpdateHandler によってキャッチされます。この時点で、イベントの「種類」は「更新」です。これで問題ないように思えます…</p>
しかし、そこからListCollectionView::moveItemInViewに移動します (リストがソートされている場合、アイテムの位置を更新する必要があるため、意味があると思います)。この関数は、アイテムを以前の場所から削除し、新しい場所に追加します。
削除すると、種類が「削除」の新しいイベントが送信されます。そして、ここで問題が発生します。私のコンポーネントは、使用するデータの削除イベントをリッスンし、この要素が削除された場合は selectedItem を削除します。
問題があるのは moveItemInView の呼び出しの周りだと思います: ListCollectionView::handlePropertyChangeEvents の呼び出し(listChangeHandler によって呼び出されます) は次のとおりです: moveItemInView(updateEntry.item, updateEntry.item, eventItems); ( updateEntry.item はリストの変更された項目であり、 eventItems は空の配列です)
そのプロトタイプは次のとおりです。 private function moveItemInView(item:Object, dispatch:Boolean = true, updateEventItems:Array = null):void
それはバグですか?