Flex: прослушивание customEvent из parentApplication - PullRequest
1 голос
/ 22 мая 2011

Я пытаюсь прослушать событие, созданное во всплывающем всплывающем окне tileWindow.Цель состоит в том, чтобы получить массив, отправленный и обновленный во всплывающем окне, который будет получен вызывающим приложением, когда всплывающее окно закрыто.

Как прокомментировано ниже, я проверил, что он достигает точки отправки события в popUp- и никогда не прослушивается в основном приложении.Чего мне не хватает?

Мой customEvent выглядит следующим образом:

package folder1
{           
import flash.events.Event;
import mx.collections.ArrayCollection;

public class MyCustomEvent extends Event
{
    public var myDataToPass:ArrayCollection;
    public static const ON_SUBMIT:String = "submit";

    public function MyCustomEvent (type:String, bubbles:Boolean=true, cancelable:Boolean=false)
    {
        super(type, bubbles, cancelable);
    }
 }
}

Во всплывающем окне внутри tileWindow у меня есть

public var newEvent:MyCustomEvent=new MyCustomEvent("submit");
        private function closePopUp():void{

            newEvent.myDataToPass=elementData;
            dispatchEvent(newEvent);
            trace(" came into close function"); //this is tested
            PopUpManager.removePopUp(this);

        }

Наконец, в вызывающем приложении я имеюэта структура

private function createModifyPopUp(evt:MouseEvent):void{
            var modify:Modify=new Modify();
            modify.elementData=elements;
            modify.eventTarget=evt.currentTarget;
            addEventListener(MyCustomEvent.ON_SUBMIT,rebuild);

            trace("came  into modify"); //this is tested
            PopUpManager.addPopUp(modify,this,true);
            PopUpManager.centerPopUp(modify);
        }



        private function rebuild(evt:MyCustomEvent):void{
            trace("got listened");//NEVER REACHES HERE
            elements=evt.myDataToPass;
            buildfunction(); 
        }  

Ответы [ 2 ]

3 голосов
/ 22 мая 2011

Проблема в том, что родительский контейнер всплывающих окон во Flex не является Application или визуальным компонентом, который создает всплывающее окно, а SystemManager. Поэтому, если вы хотите использовать всплывающее окно событий из всплывающего окна, вы должны прослушивать события экземпляра SystemManager, которые доступны через свойство systemManager компонента.

Что касается меня, я предпочитаю не использовать всплывающие окна в таких случаях, а подписываться на события всплывающего окна, получая прямую ссылку на окно в методе addPopUp.

1 голос
/ 22 мая 2011

Попробуйте:

private function createModifyPopUp(evt:MouseEvent):void{
            var modify:Modify=new Modify();
            modify.elementData=elements;
            modify.eventTarget=evt.currentTarget;
            modify.addEventListener(MyCustomEvent.ON_SUBMIT,rebuild);

            trace("came  into modify"); //this is tested
            PopUpManager.addPopUp(modify,this,true);
            PopUpManager.centerPopUp(modify);
        }

Более подробный пример решения вашей проблемы можно найти здесь: http://xposuredesign.net/?p=53

Приветствия

...