[英]Flex popup window
我在父頁面中創建模態彈出畫布窗口。 當我關閉彈出窗口時,我們如何在父屏幕中獲得子彈出窗口剛剛關閉的通知。 有什么事嗎?
顯示彈出窗口的代碼:
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
的用戶來決定如何使用該組件。
但老實說,這是兩個非常相似的機制來執行相同的最終目標。
是的有:我更喜歡使用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弗蘭克
與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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.