使用PopUpManager进行事件的最佳方式?

如果我使用PopUpManager添加一个子节点,并且我从该子节点发送一个事件,则气泡似乎不会出现在我的应用程序(主应用程序)的顶部。 例如:
PopUpManager.addPopUp( popup, parentApplication as Application, false );
然后在弹出窗口中,我做:
dispatchEvent( new Event( "testEvent", true ) );
我在parentApplication(root .mxml)中为“testEvent”提供了一个eventListener,但它永远不会触发。因此,我一直在调度事件并在ModelLocator上侦听事件(使用cairngorm)。这显然不太理想,因为我必须手动确保在很多情况下删除事件监听器。 有任何想法吗? 谢谢!     
已邀请:
我对Mate比Cairngorm更熟悉,但我在这种情况下做的是用模型备份弹出窗口并从模型中调出事件。由于模型和主应用程序位于同一级别,主应用程序可以听到事件。 更新: 这是一个粗略的例子。 在我的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.mxml调用
model.dispatchMyCustomEvent();
时,它将使用演示模型的调度程序的范围调度该事件,该调度程序将与父应用程序处于同一级别。我希望这有帮助!     
试试这个
var popup:SomePopup = PopUpManager.createPopup(this, SomePopup, true) as SomePopup;
popup.addEventListener(CloseEvent.CLOSE, onClose);
并确保在弹出窗口关闭时删除该偶数监听器。     
如果要在顶部捕获冒泡事件,可以将事件侦听器添加到FlexGlobals.topLevelApplication.systemManager。希望有所帮助。     
在弹出窗口中,您可以使用: Application.application.dispatchEvent,只要您将侦听器本身附加到Application.application。 我实际上并不是调用Application.application的忠实粉丝,因为它降低了组件模型的可重用性,但是在紧要关头它确实有效。     

要回复问题请先登录注册