1

要するに:

カスタムコンポーネントにイベントリスナーが必要です。これにより、すべてのインスタンス(編集せずに)が同時に反応し、親コンテナー内のディスパッチされたイベントによって起動されます。

詳細に:

  • タブナビゲーターを備えたカスタムコンポーネントがあります。(タブは、言語ごとに異なる設定を表示することを目的としています。)

  • すべての言語のボタンが付いたボタンバーがあります。

  • カスタムコンポーネントのインスタンスはたくさんあります。

言語バーのボタンをクリックして、すべてのインスタンスを同じタブに切り替えたい(カスタムコンポーネントにはタブを変更するロジックが含まれています)。

カスタムコンポーネントの各インスタンスのイベントリスナーを追加することでそれを行うことができるので、タブを変更する内部関数を呼び出します。しかし、それは非常に結合しているようですよね?

コンポーネントのマスタークラスで実行できるので、親コンテナのイベントをリッスンします。

私の考えでは、このコードは機能するはずですが、機能しません(明らかに、カスタムイベントを使用して新しい言語値を渡すことはできません)。

this.parent.addEventListener("lang_change", this.change_tab);

このようにして、コンポーネントのインスタンスをドロップするだけで、それ自体が機能することを確認できます。

前もって感謝します

4

2 に答える 2

3

カスタムコンポーネントにイベントリスナーが必要です。これにより、すべてのインスタンス(編集せずに)が同時に反応し、親コンテナー内のディスパッチされたイベントによって起動されます。

あなたがやりたいことそのものが、定義上、カプセル化を破ります。理想的な世界では、コンポーネントはその親について何も知らないはずです。コンポーネントがその親と通信する必要がある場合は、イベントをディスパッチする必要があります。親が子と通信する必要がある場合は、その子のパブリックメソッドを呼び出す(またはパブリックプロパティを変更する)必要があります。カプセル化の観点から、私は子供が親のイベントを聞くことをお勧めすることはできません。

言語バーのボタンをクリックして、すべてのインスタンスを同じタブに切り替えたい(カスタムコンポーネントにはタブを変更するロジックが含まれています)。

したがって、ボタンのクリックハンドラーを配置して、次のようにします。

public function onClick():void{
  myCustomTabNavigator1.selectedIndex = 1 
  myCustomTabNavigator2.selectedIndex = 1 
  myCustomTabNavigator2.selectedIndex = 1 
}

参照する場合は、selectedItemを設定することもできます。、配列にカスタムTabNavigatorがある場合は、それらをループできます。カスタムTabNavigatorがカスタムコンポーネントの子である場合は、selectedIndexを直接設定する代わりに、そのカスタムコンポーネントにメソッドを作成してデフォルトを設定し、各コンポーネントでそのメソッドを呼び出すことができます。

于 2011-01-28T13:06:57.363 に答える
-1

次のようなMVCモデルを使用する必要があると思います: Cairngorm

http://code.google.com/p/swizframework/

http://www.robotlegs.org/

http://puremvc.org/

于 2011-01-28T12:44:48.877 に答える