2011-01-19 9 views
1

私は、封じ込め階層内にactionscriptでインスタンス化されたコンポーネントを持っています。それはComboBoxを拡張しますが、動的にインスタンス化されます。あなたがいつそれを必要とするかは決して分かりません。閉じ込めツリー内の親からデータを取得する標準的な方法はありますか?

囲み階層のどこかに、NavigatorContentを拡張するものがあります。これは論理的には、コンボボックスの有効な値を配置するのに適切な場所です。

子コンポーネントがその有効な値のセットへの参照を取得する標準的な方法は何ですか?

答えて

1

私は、子供が作成時にセルフリフレクションでバブリングイベント(CHILD_CREATED)を送出するようにすることで、この問題を解決します。次に、有効な値のセットにアクセスできるオブジェクトのCHILD_CREATEDイベントを待ち受けます。子供が作成されたときに知っているリスナーを追加し、値

子が作成された#へのrefrence必要 - -

#1親が作成されるように、自己refrenceとCHILD_CREATEDダイナミックイベントを送出しますプロパティ

#3親が聞くCHILD_CREATED - 子コンポーネントへの参照を抽出し、そのデータプロバイダを有効な値のセットに設定します。

EDIT:

あなたがデータグループに基づいて、コンポーネントを扱っている場合にはこの種の問題を処理するための非常にクリーンな方法は、(イベントのレンダラーにrefrenceがある)rendererAddを使用することです。 これは確かにそれを処理する標準的な方法であるでしょう

したがって、直接アクセスする必要があるコンポーネントを表示するためにデータグループを使用する場合は、rendererAddイベントを使用してください。あなたの問題にそれが当てはまらないなら、私はCHILD_CREATEDメソッドを使うでしょう。

1

これを解決する標準的な方法はありません。可能な解決策はたくさんあります。あなたは可能性:

  • はNavigatorContentへの参照を渡し子コンストラクタ
  • への引数として値を渡した後、直接インスタンス化
  • 時の値を取得NavigatorContentへの参照を渡し、その後、変更を加えます新しい値が設定されるたびに発生するリスナー
  • 子を作成および移入するためのNavigatorContentへの参照を持つファクトリまたはファクトリメソッドを使用する
  • 作成およびデータの作成を管理するためのプロキシまたは代理人クラスを作成するすべての子どものNavigatorContent
  • のエン...

私はトン以上あると確信しています。

これらはすべて、プログラムの動作、階層の残りの仕組み、それらの値が更新された時と更新されたとき、およびその他の要件が満たされる必要がある場合に依存します。
そこから始めて、人々がここで行った提案を見て、あなたのシナリオに最も適したものを選んでください。

+0

これは一般的なケースでは機能しません。なぜなら、コンポーネントがデータを必要とする場合、動的に作成されたコンポーネントのツリー全体に必要な情報を基本的に渡す必要があるからです。 Haempの答えは、クライアントが必要なデータを親に尋ねることを可能にするメカニズムを提供します。 FWIW、私の初期の素朴な解決策は、私がデータを知っていたクラスを探して封じ込めツリーを歩くことでした。それはすばやく汚れていて、仕事をしていて、どんな優雅さも欠いています。それはカプセル化をひどく破る。 –

+0

ファクトリを作成すると、要素を包含ツリーの下に引き渡す必要はなく、カプセル化を破ることもありません。NavigatorContentへの参照を含むCreationManagerシングルトンを作成し、CreationMananager.instance.getComboBoxFactory()。createComboBox()どこにでも必要な場所です。表示リストに依存しないでも、NavigatorContentにどの種類の子を扱うかを知る必要はありません。それは一般的にどのように機能しませんか? – weltraumpirat

+0

あなたはまさに正しいです。ありがとう! –

関連する問題