Flex всплывающее окно - PullRequest
       41

Flex всплывающее окно

4 голосов
/ 03 ноября 2011

Я создаю модальное всплывающее окно холста на родительской странице.Когда я закрываю всплывающее окно, как мы получаем уведомление на родительском экране, что дочернее всплывающее окно просто закрыто.Любое событие для этого?

Ответы [ 3 ]

5 голосов
/ 03 ноября 2011

Код для отображения вашего всплывающего окна:

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 решил, как использовать компонент.

Честно говоря, это два очень похожих механизма для достижения одной и той же конечной цели.

0 голосов
/ 05 ноября 2011

Наряду с ответом Брайана не забудьте отключить слушателя события. Если вы оставите обработчик событий в своем главном приложении, прослушивая событие от дочернего объекта, дочерний объект не будет собирать мусор, поскольку что-то все еще ссылается на него. Это распространенная проблема утечки памяти.

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

0 голосов
/ 03 ноября 2011

Да, есть: Я предпочитаю использовать Popupmanager:

Ваше всплывающее окно: Есть кнопка «закрыть», вызывающая внутреннюю функцию например .closeme

private function closeMe () :void
{
   PopUpManager.removePopUp(this);
}

в вашем Parent, вы открываете всплывающее окно, как это:

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));
}

My TitleWindow - это название вашего класса всплывающего окна, расширенного с помощью TitleWindow.

BR Frank

...