1

PopUpManager を使用して子を追加し、その子からイベントをディスパッチすると、バブルがアプリケーション (メイン アプリケーション) の上部にバブルしないようです。

例えば:

PopUpManager.addPopUp( popup, parentApplication as Application, false );

次に、ポップアップで次のことを行います。

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

「testEvent」のparentApplication(ルート.mxml)にeventListenerがありますが、起動しません。このため、イベントをディスパッチし、ModelLocator でイベントをリッスンしています (cairngorm を使用)。多くの場合、イベントリスナーを手動で削除する必要があるため、これは明らかに理想的ではありません。

何か案は?

ありがとう!

4

4 に答える 4

2

代わりにこれを試してください

var popup:SomePopup = PopUpManager.createPopup(this, SomePopup, true) as SomePopup;
popup.addEventListener(CloseEvent.CLOSE, onClose);

そして、ポップアップが閉じるときに、その偶数リスナーを必ず削除してください。

于 2011-04-07T18:44:38.920 に答える
2

上部でバブリング イベントをキャッチする場合は、イベント リスナーを FlexGlobals.topLevelApplication.systemManager に追加できます。それが役立つことを願っています。

于 2011-04-07T19:43:13.017 に答える
0

私はCairngormよりもMateに精通していますが、この状況で私が行うことは、モデルを使用してポップアップをバックアップし、モデルからイベントをディスパッチすることです。モデルとメインアプリケーションは同じレベルにあるため、メインアプリケーションはイベントを聞くことができます。

アップデート:

これが大まかな例です。

MainMap.mxmlで、プレゼンテーションモデルのインスタンスを作成し、それをポップアップに挿入します

<EventHandlers type="{ FlexEvent.PREINITIALIZE }">
  <ObjectBuilder generator="{ MyPopUpPresentationModel  }" constructorArguments="{ scope.dispatcher }"/>
</EventHandlers>

<Injectors target="{ MyPopUp }">
    <PropertyInjector targetKey="model" source="{ MyPopUpPresentationModel }"/>
</Injectors>

そして、MyPopUp.mxmlには、モデルのインスタンスがあります。

<fx:Script>
  <![CDATA[
    [Bindable] public var model:MyPopUpPresentationModel;
  ]]>
</fx:Script>

これがMyPopUpPresentationModel.asです。

package
{
  private var dispatcher:IEventDispatcher;
  public function DigitalTagTrackingPresentationModel(target:IEventDispatcher)
  {
    this.dispatcher = target;
  }

  public function dispatchMyCustomEvent():void
  {
    dispatcher.dispatchEvent(new Event("MyCustomEvent"));
  }
}

MyPopUp.mxmlmodel.dispatchMyCustomEvent();から呼び出すと、親アプリケーションと同じレベルにあるプレゼンテーションモデルのディスパッチャーのスコープを使用してイベントがディスパッチされます。これがお役に立てば幸いです。

于 2011-04-07T21:42:45.597 に答える
0

ポップアップでは、次のものを使用できます。リスナー自体が Application.application にアタッチされている限り、Application.application.dispatchEvent。

コンポーネント モデルの再利用性が低下するため、私は実際には Application.application でのディスパッチの大ファンではありませんが、ピンチの場合は機能します。

于 2011-04-07T21:21:17.793 に答える