0

私はそのような問題を抱えています:私は独自のネスト階層を持つ2つのカスタムコンポーネントを持っています...1つは別のコンテナです。私はお互いに「慣れる」必要があります。私がそれを達成しようとしている方法は、グローバルイベントを使用することです(一方が発火し、もう一方がキャッチしています):

Application.application.addEventListener("Hello", function (data:Event):void{
        // .. some actions
    });

//and
Application.application.dispatchEvent(new Event(Hello));

すべてがかなり良いのですが、1 つだけ問題があります。イベントをキャッチしようとすると、それをキャッチしているクラスにアクセスできません。例えば:

  1. コンテナがイベントを発生させます。
  2. 子供が捕まえました。
  3. 次に、コンテナとその子の間の接続を作成する必要があります。

しかし、私が達成できる唯一のことは、DynamicEvent でコンテナへの参照を渡すことです。イベントハンドラ関数で子にアクセスできる可能性はありますか? または、この問題を解決するためのよりエレガントな方法があるかもしれません...

どんな助けでも大歓迎です:)

4

3 に答える 3

1

ほとんどの場合、target または 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);

イベントにカスタム イベント データを追加する必要がある場合。独自のカスタム イベント クラスを作成し、データを追加できます。アプリケーション コンテナからイベントを発生させる特定のユース ケースはありますか? ぜひ聞いてみたいです。

于 2010-05-25T14:04:33.723 に答える
0

探しているイベント管理のタイプは、MateSwizなどの依存性注入フレームワークでうまく解決されます。基本的に、グローバル レベルでイベントをキャッチし、それらのイベントのさまざまなコンポーネントでアプリケーション全体でさまざまなアクションを実行する必要があります。

Mate には、特定のイベントをマップしてさまざまな方法でビューと対話できる EventMap の概念があります。特定のイベントが発生したときに、ビュー プロパティに値を挿入したり、ビュー内でメソッドを呼び出したりできます。

フレームワークを使いたくない場合は、Event クラスの bubbles プロパティを見てください。Event クラスをオーバーライドしてカスタム イベントを作成する場合は、bubble のデフォルト値をtrueに設定します。そうすれば、アプリケーション内でのネストの深さに関係なく、イベントはメイン アプリケーションにバブルアップし続けます。

于 2010-05-25T14:40:27.127 に答える
0

Flextras が言うように、カスタム イベント (この場合は Cairngorm イベント) を作成し、実際にデータ (イベント レスポンダーが応答するコンテナーへの参照) を追加しました。ごくまれに、コンテナが操作できない状態にある可能性があるためです。私たちの場合、出入りできる動的にロードされたモジュールがたくさんあります。突然、null ポインター例外に相当する flex が発生します。しかし、これは非同期性が高く、多くの null チェックと例外キャッチを行う場合に支払う代償です。

于 2010-05-25T14:22:26.690 に答える