2つのカスタムクラス間のイベントベースの相互作用
-
04-10-2019 - |
質問
私にはそのような問題があります:私は2つのカスタムコンポーネントを持っています。それらには独自のネスティング階層があります... 1つは別のコンテナです。私はお互いに「それらを慣れさせなければなりません」。私がそれを達成しようとしている方法は、グローバルなイベントを使用することです(一方のイベントは発砲し、もう一方はキャッチしています):
Application.application.addEventListener("Hello", function (data:Event):void{
// .. some actions
});
//and
Application.application.dispatchEvent(new Event(Hello));
すべてがかなり良いですが、1つのことがあります。イベントをキャッチしようとしているとき、クラスにアクセスすることはできません。例えば:
- コンテナがイベントを発射します。
- 子供はそれを捕まえた。
- その後、コンテナとその子の間の接続を作成する必要があります。
しかし、私がACheiveが可能にすることができる唯一のことは、DynamiceVentのコンテナへの参照を渡すことです。イベントハンドラー機能で子供にアクセスできる可能性はありますか?または、この問題を解決するためのよりエレガントな方法があるかもしれません...
どんな助けも大歓迎です:)
解決
ほとんどの場合、ターゲットまたはcurrentTargetのいずれかで、イベントを起動しているコンポーネントにアクセスできます。
http://livedocs.adobe.com/flex/3/langref/flash/events/event.html http://livedocs.adobe.com/flex/3/langref/flash/events/event.html#currenttarget http://livedocs.adobe.com/flex/3/langref/flash/events/event.html#target
ただし、アプローチにより、トップレベルのアプリケーションからイベントを解雇しています。ネストされたコンポーネントのどちらからも。これは私を珍しいように襲います。
私はあなたがこのような階層を持っていると思います:
応用
---コンテナ1
-------コンテナ2
Container2からイベントを発射し、Container1で聞くことをお勧めします。
container2のディスパッチコードは次のようなものになります:
this.dispatchEvent(new Event('myCustomEvent'));
container1では、このようなイベントを聞くことができます:
container2.addEventListener('myCustomEvent', onMyCustomEvent);
イベントにカスタムイベントデータを追加する必要がある場合。独自のカスタムイベントクラスを作成してデータを追加できます。アプリケーションコンテナからイベントを発射するための特定のユースケースはありますか?聞きたいです。
他のヒント
Flextrasが言うように、カスタムイベントを作成し、ケアンゴームイベントでカスタムイベントを作成し、実際にデータを追加しました。これは、イベントレスポンダーに返信するコンテナへの参照です。非常にまれな機会には、コンテナが相互作用できる状態にない可能性があるため、私はそれをそのようにするのが本当に好きではありませんでした。私たちの場合、動的にロードされたモジュールがたくさんあります。突然、Null Pointer例外に相当するフレックスが得られます。しかし、それはあなたが非常に非同期であり、多くのヌルチェックと例外キャッチをするときに支払う価格です。
あなたが探しているイベント管理のタイプは、依存関係の噴出フレームワークでうまく解決されます メイト また Swiz. 。基本的に、グローバルレベルでイベントをキャッチし、それらのイベントのさまざまなコンポーネントでアプリケーション全体でさまざまなアクションを実行する必要があります。
Mateには、特定のイベントをマップしてさまざまな方法で意見と対話できるイベントマップの概念があります。特定のイベントが発生したときに、ビュープロパティに値を表示するか、ビュー内でメソッドを呼び出すことができます。
フレームワークを使用したくない場合は、イベントクラスのバブルプロパティをご覧ください。イベントクラスをオーバーライドしてカスタムイベントを作成する場合、バブルのデフォルト値をに設定します 本当です. 。そうすれば、あなたのイベントがあなたのアプリケーションにどれだけ深くネストされているかに関係なく、メインアプリケーションにバブルアップし続けます。