0

独自のカスタム コンポーネントがあります。このコンポーネントは、基本的なコンテナーから拡張されます。視覚化されている itemRenderer インスタンスにアクセスできるようにしたいと考えています。コンポーネント mx:list には、各データ プロバイダー アイテムをレンダリングする itemRenderer インスタンスを含む配列の配列を提供する内部ゲッターがあることを知っています。同じものが欲しい。それを行う方法について何か考えはありますか?

具体的には、dataProvider アイテムの selected プロパティを true または false に設定しています。私の ItemRenderer の updateDisplayList 関数から、プロパティの変更を確認し、選択したものの境界線の色を修正します。残念ながら、updateDisplayList 関数を強制する必要があります。リストの ItemRenderer でこれを一度実行しました。独自のリストを作成することで、レンダリングされるアイテムのリストを取得して視覚化することができたため、リストのみが実用的でした(多くはありません)。レンダリングされたアイテムと updateDisplayList を通過するオーバーヘッドはありませんでした。しかし、この場合、100 個のアイテムを持つことができます。非常に多くのアイテムのスタイルをチェックして変更することを想像してみてください。ありがとう

4

2 に答える 2

1

Flex アーキテクトは、コンポーネントを適切にカプセル化しているため、意図的にこれを困難にしています。要するに、これをやろうとすることさえ、優れた OOP 原則に違反しています。

とはいえ、おそらくやろうとしていることの約 90% はデータ項目を操作することで実行でき、残りの 10% は、itemRenderer のカスタム プロパティをコールバックに設定する itemRenderer の ClassFactory を使用することで実行できます。含まれているコンテキストで利用可能なデータを見て、それに基づいて値を返すことができます。

最終目標についてもう少し詳しく説明していただければ、より具体的な内容をお伝えできます。


明確化に照らして編集:

データ オブジェクト クラスが変更されたときにイベントをディスパッチする必要があります (1 つの方法は、バインド可能にするか、選択したプロパティを単にバインド可能にすることです)。次に、レンダラーで change イベントをリッスンし、適切なアクションを実行します。

これを処理する 2 番目の方法は、コレクションを refresh() し、selectedItem を最初に保存し (それが気になる場合)、更新が終了したらリセットすることです。

于 2012-10-30T22:04:21.933 に答える
0

getChildAtメソッドを介してitemRendererインスタンスにアクセスできると思います。Flex 3のコンテナは、「getChildAt」、「numChildren」をオーバーライドします。一部の子は論理的な子であり、一部の子は背景、境界線、スクロールバーなどの装飾的な子です。

itemRendererは、次のコンポーネントのライフサイクル中に作成される可能性があるため、dataProviderの割り当て時にすぐに使用可能にならない場合があることに注意してください。基になるコンテナのドキュメントを確認し、レンダラーが確実に作成されたときにリッスンするイベントを見つけて、確実にアクセスできるようにします。

于 2012-10-30T17:20:57.213 に答える