我在父页面中创建模态弹出画布窗口。当我关闭弹出窗口时,我们如何在父屏幕中获得子弹出窗口刚刚关闭的通知。有什么事吗?
答案 0 :(得分:5)
显示弹出窗口的代码:
var popup:MyPopup = new popup:MyPopup();
popup.addEventListener(CloseEvent.CLOSE, function(evt) {
PopUpManager.removePopUp(popup);
});
PopUpManager.addPopUp(popup, this, true);
在MyPopup
课程中,您将有一个关闭弹出窗口的按钮。只需挂钩click事件即可发布“CLOSE”事件:
<s:Button Label="X" click="dispatchEvent(new CloseEvent(CloseEvent.CLOSE));" />
我更倾向于使用MyPopup
对象调用PopUpManger.removePopUp
(正如@Fank建议的那样),因为它将MyPopup
组件与PopUpManager
组合在一起喜欢。我希望MyPopup
的用户决定如何使用该组件。
老实说,这些是执行相同目标的两种非常相似的机制。
答案 1 :(得分:0)
是的,有: 我不敢使用Popupmanager:
你的弹出窗口: 按钮“关闭”调用内部函数eg.closeme
private function closeMe () :void
{
PopUpManager.removePopUp(this);
}
在你父母的中,你打开像这样的PopUp:
private function openPopup () :void
{
var helpWindow:TitleWindow = TitleWindow(PopUpManager.createPopUp(this,MyTitleWindow,fale));
helpWindow.addEventListener(CloseEvent.CLOSE, onClose);
}
protected function onClose (event:CloseEvent) :void
{
PopUpManager.removePopUp (TitleWindow(event.currentTarget));
}
我的TitleWindow是由TitleWindow扩展的cour popup类的名称。
BR 弗兰克
答案 2 :(得分:0)
除了Brian的回答,不要忘记分离事件监听器。如果您将主事件中的事件处理程序保留为侦听来自子对象的事件,则子对象将不会被垃圾收集,因为某些内容仍在引用它。这是一个常见的内存泄漏问题。
popup.addEventListener(CloseEvent.CLOSE, popup_CloseHandler);
private function popup_CloseHandler(event:CloseEvent):void{
event.target.removeEventListener(CloseEvent.CLOSE, popup_CloseHandler);
PopUpManager.removePopUp(popup);
}
如果您想进一步深入研究,这里有一篇关于Flex内存管理的精彩帖子。
http://blogagic.com/163/flex-memory-management-and-memory-leaks