簡體   English   中英

Flex彈出窗口

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM