Apache flex 使用PopUpManager进行活动的最佳方式?
如果我正在使用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.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。谢谢你能详细说明一下吗?听起来很有希望,但我不相信