0

内部コンポーネントにアクセスできる方法は、私が知っているよりも優れていると感じています。FlexGlobals.topLevelApplication.someChild1.someChild2.someChild3 などの内部コンポーネントにアクセスできることはわかっています。

親コンポーネント階層の数を持つコンポーネントがあります。とにかく、すべての親を参照せずに最後の子にアクセスできるかどうかを知りたいです。

そのコンポーネントでイベントをトリガーする必要があります。

FlexGlobals.topLevelApplication.child1.child2.child3.dispatchEvent(new Event('clearData', true));

更新: ポイント 1 で提案された方法を試しました。イベント リスナーを子コンポーネントに追加し、アクション スクリプト ファイルからディスパッチしようとしましたが、聞こえませんでした。\

child3.addEventLisener('clearData', clearHandler);

そして、次のようなイベントをディスパッチしました。

dispatchEvent(new Event(modelApp.CLEAR_PALETTE, true)
4

3 に答える 3

1

追加してみてください

FlexGlobals.topLevelApplication.systemManger.addEventLisener('clearData', clearHandler);

child3 で

そして、あなたが望むどこからでもそれをディスパッチし、

ディスパッチには以下を使用します

FlexGlobals.topLevelApplication.systemManager.dispatchEvent(new Event(modelApp.CLEAR_PALETTE, true)
于 2013-03-22T07:56:51.290 に答える
0

コンポーネントのレベルまで下がって、初期化時に EventListener を追加する必要があると思います。どこからでも発送できます。

別の方法では、作成完了時にコンポーネント参照 (ID) をオブジェクトに保存する必要があります。その参照をモデルに保存します。いつでもどこでもアクセスできるようになりました。そして、やりたいことを何でもしてください。

私もこのようにして、画面コンポーネントの参照を配列に保存し、すべてのコンポーネントを動的に検証する必要がある場所にアクセスしました。

それ以外の場合は、必要な子を取得するためにネストされたループが必要です。

于 2013-03-22T04:49:17.177 に答える
0

質問からどのように理解したかは、アプリケーション設計の優れた原則を使用していませんでしたが、それは別の質問です。
あなたの場合、ステージをバブルイベントのグローバル currentTarget として使用できます。bubbles = true で displayObject からイベントをディスパッチします。キャプチャ フェーズの有無にかかわらず、ステージ オブジェクトを使用したターゲット表示オブジェクトのリッスン イベント。

任意の displayObject で:

dispatchEvent(new Event("myEvent", true));

ターゲット表示オブジェクト:

// add ADDED_TO_STAGE event listener in constructor or when component creation complete
protected function component_creationCompleteHandler(event:FlexEvent):void
{
    addEventListener(Event.ADDED_TO_STAGE, onAddToStage);
}

..

protected function onAddToStage(event:Event):void
{
    stage.addEventListener("myEvent", eventHandler, true);
}

protected function eventHandler(event:Event):void
{
    trace("eventHandler");
}

FlexGlobals オブジェクトへの参照を使用するよりも優れています。コードをより柔軟に。

于 2013-03-22T08:00:48.343 に答える