2012-02-17 21 views
1

私はAIRアプリケーションで作業しています:グローバルイベントリスナーを接続するにはどうすればよいですか?

メインウィンドウはダッシュボードに似ています。メニューバーで、ダッシュボードの詳細を含む他のウィンドウを開くことができます。これらを閉じると、メインウィンドウが更新されます。

イベントリスナーを使用しようとしましたが、結果は良くありません。メインウィンドウから直接詳細ウィンドウを開くと、イベントリスナを追加する方法を知っています - それは動作しますが、詳細ウィンドウがメニューバーから開いている場合は、どのように行うのかわかりません!

私を助けてくれてありがとう。

+0

質問を少し分かりやすくするためにあなたの言い回しを編集しました - 私は正しく意味を持っていればいいと思っています...あなたが試したことの例やイベントリスナーがうまくいかなかった理由の例を追加できますか?いくつかのコードは良いでしょう。 – weltraumpirat

答えて

0

イベントリスナーを直接追加してオブジェクト(EventDispatcher)を聴くことも、ディスパッチャオブジェクトがスプライトなどの表示リストにある場合は、ステージングレベルでキャプチャパラメータを本当。

しかし、このイベントをキャッチするには、ディスパッチャがステージにある必要があります。

あなたのメインウィンドウには、(真=キャプチャで)ステージにリッスン

:メッセージとしてステージを用い

dispatchEvent(new Event("MY_CUSTOM_EVENT")); 

しかし、(AB):

stage.addEventListener("MY_CUSTOM_EVENT", handle_custom_event, true); 

private function handle_custom_event(e:Event):void 
{ 
    var sub_window:Object = e.target; 
    // do something to your sub_window 
} 

あなたのサブウィンドウは、このようなイベントをディスパッチすることができますこのようにカスタムイベントのインフラストラクチャを渡すのはちょっと面倒です。このようなコミュニケーションが本当に必要な場合は、よりフォーマルなメッセージ・パッシング・アーキテクチャーを検討することができます。静的なMessageBusクラスでさえ、コードベースでこれをどこで使うのかを少なくとも素早く特定するのに役立ちます。いずれにしても、参照やメモリリークには注意が必要です。

+0

別個のNativeWindowsが同じステージを持っているとは思いません。 –

+0

ああ、良い点。あまりにも自分の答えを投票することはできません。 =) –

+0

あなたはそれを削除するように求めることができます –

2

あなたが探しているのはシングルトンです。イベントディスパッチャを内部に置くだけで、アプリケーションのどこからでも聴くことができます。

シングルトンはメモリ内のオブジェクトの一意のインスタンスを持つようなので、そのオブジェクト内の変数を変更する(またはイベントを送信する)誰もが変更されます。

使用方法に関するコードの例を示します。

http://life.neophi.com/danielr/2006/10/singleton_pattern_in_as3.html

注:シングルトンが同時に強力かつ危険である、それらを使用する方法についての話がたくさんあるあなたは大きなプロジェクトを構築検討している場合は、そのことについてもう少しお読みください。

希望すると助かります!

1

問題は、ビューからビジネスロジックを実行していることです。これをしないでください。代わりに、ウィンドウ内からウィンドウを直接開くのではなく、各メニューからイベントをディスパッチします。それらのイベントをより高いレベルで聴いて、開いた新しいウィンドウを直接聞くことも、IEventDispatcher型の変数を公開するベースウィンドウクラスを作成することもできます。その変数を同じイベントディスパッチャーに設定すると、イベントバスと呼ばれるイベントを呼び出すことができます。

このアーキテクチャでは、シングルトンを使用するよりももう少し考えが必要ですが、プロジェクトに導入することで実行するタイトなカップリングやその他の問題は回避されます。

関連する問題