Apache flex 使用PopUpManager进行活动的最佳方式?

Apache flex 使用PopUpManager进行活动的最佳方式?,apache-flex,events,flex3,adobe,cairngorm,Apache Flex,Events,Flex3,Adobe,Cairngorm,如果我正在使用PopUpManager添加一个子项,并且我从该子项发送了一个事件,则气泡似乎不会出现在我的应用程序(主应用程序)的顶部 例如: PopUpManager.addPopUp( popup, parentApplication as Application, false ); 然后在弹出窗口中,我执行以下操作: dispatchEvent( new Event( "testEvent", true ) ); 我在parentApplication(root.mxml)中有一个用于

如果我正在使用PopUpManager添加一个子项,并且我从该子项发送了一个事件,则气泡似乎不会出现在我的应用程序(主应用程序)的顶部

例如:

PopUpManager.addPopUp( popup, parentApplication as Application, false );
然后在弹出窗口中,我执行以下操作:

dispatchEvent( new Event( "testEvent", true ) );
我在parentApplication(root.mxml)中有一个用于“testEvent”的eventListener,但它从不触发。因此,我一直在调度事件并在ModelLocator上侦听事件(使用cairngorm)。这显然不理想,因为我必须手动确保在很多情况下删除事件侦听器

有什么想法吗

谢谢

试试这个

var popup:SomePopup = PopUpManager.createPopup(this, SomePopup, true) as SomePopup;
popup.addEventListener(CloseEvent.CLOSE, onClose);
并确保在弹出窗口关闭时删除该侦听器。

请尝试此操作

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

并确保在弹出窗口关闭时删除该侦听器。

如果要捕获顶部的冒泡事件,可以将事件侦听器添加到FlexGlobals.topLevelApplication.systemManager。希望这能有所帮助。

如果您想捕捉顶部冒泡的事件,可以将事件侦听器添加到FlexGlobals.topLevelApplication.systemManager。希望对您有所帮助。

在弹出窗口中,您可以使用: Application.Application.dispatchEvent,只要侦听器本身连接到Application.Application


实际上,我不太喜欢在Application.Application上调度,因为它降低了组件模型的可重用性,但在必要的情况下,它确实可以工作。

在弹出窗口中,您可以使用: Application.Application.dispatchEvent,只要侦听器本身连接到Application.Application


实际上,我不太喜欢在Application.Application上调度,因为它降低了组件模型的可重用性,但在紧要关头,它确实可以工作。

我对Mate比Cairngorm更熟悉,但在这种情况下,我要做的是用模型备份弹出窗口,并从模型中调度事件。由于模型和主应用程序位于同一级别,因此主应用程序可以听到事件

更新:

这里有一个粗略的例子

在myMainMap.mxml中,我创建了演示模型的一个实例,并将其注入到弹出窗口中

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

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

调用
model.dispatchMyCustomEvent()时MyPopUp.mxml它将使用表示模型的分派器的作用域分派事件,该分派器将与父应用程序处于同一级别。我希望这有帮助

我对Mate比Cairngorm更熟悉,但在这种情况下,我要做的是用一个模型备份我的弹出窗口,并从模型中分派事件。由于模型和主应用程序位于同一级别,因此主应用程序可以听到事件

更新:

这里有一个粗略的例子

在myMainMap.mxml中,我创建了演示模型的一个实例,并将其注入到弹出窗口中

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

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

调用
model.dispatchMyCustomEvent()时MyPopUp.mxml它将使用表示模型的分派器的作用域分派事件,该分派器将与父应用程序处于同一级别。我希望这有帮助

你在干什么?popup.addEventListener(“testEvent”,CallbackBuntion);你在做?popup.addEventListener(“testEvent”,CallbackBuntion)@J_A_X,出于好奇,为什么使用
createPopUp
vs.
addPopUp
可以让父应用程序听到弹出窗口发送的事件?不,它们的作用基本相同,我更喜欢createPopUp。家长无法收听任何弹出窗口,因为它们显示在单独的舞台上。如果你直接将监听器添加到弹出窗口中,你只能收听弹出窗口。我可以很好地听到弹出窗口上的事件。仅在创建弹出窗口的位置。如果我想要一个冒泡事件,它不会冒泡到父应用程序。不,它不会。你为什么要这么做?如果你真的需要它冒泡到顶部,我会添加一个监听器到弹出窗口本身,然后发送另一个事件,实际上在显示列表中。唉,你似乎不明白。弹出窗口不在同一显示列表中,因此从弹出窗口中冒泡将永远不会到达根视图(应用程序)。您需要监听事件的弹出窗口,然后再次从显示列表上的组件发送。除非您直接通过FlexGlobals调用根视图,否则没有其他方法。@J_A_X,只是出于好奇,为什么使用
createPopUp
vs.
addPopUp
使父应用程序能够听到弹出窗口发送的事件?不,它们的作用基本相同,我只是更喜欢createPopUp。家长无法收听任何弹出窗口,因为它们显示在单独的舞台上。如果你直接将监听器添加到弹出窗口中,你只能收听弹出窗口。我可以很好地听到弹出窗口上的事件。仅在创建弹出窗口的位置。如果我想要一个冒泡事件,它不会冒泡到父应用程序。不,它不会。你为什么要这么做?如果你真的需要它冒泡到顶部,我会添加一个监听器到弹出窗口本身,然后发送另一个事件,实际上在显示列表中。唉,你似乎不明白。弹出窗口不在同一显示列表中,因此从弹出窗口中冒泡将永远不会到达根视图(应用程序)。您需要监听事件的弹出窗口,然后再次从显示列表上的组件发送。除非您直接通过FlexGlobals调用根视图,否则没有其他方法。您能详细说明一下吗?这听起来很有希望,但我不太明白你所说的“备份弹出窗口”是什么意思。@andrewpthorp,我添加了一个关于如何使用Mate实现这一点的快速示例。正如我所说,我对凯恩戈姆不太熟悉,所以希望您能根据自己的需要对其进行调整。:)我喜欢这个解决方案。这是一个Flex 4解决方案,但我相信我将能够做类似的事情,将其应用于Flex 3/Cairngorm。谢谢你能详细说明一下吗?听起来很有希望,但我不相信