Flex弹出窗口

时间:2011-11-03 15:25:10

标签: actionscript-3 flex flex4 air

我在父页面中创建模态弹出画布窗口。当我关闭弹出窗口时,我们如何在父屏幕中获得子弹出窗口刚刚关闭的通知。有什么事吗?

3 个答案:

答案 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