Flex 4: прослушиватель событий создан, но не вызывается? - PullRequest
0 голосов
/ 13 сентября 2010

Я пытаюсь вызвать событие, которое я создал в другом компоненте. Я добавил trace () в мои методы, чтобы я мог видеть, что вызывается. Все, кроме слушателя события (myEvent) вызывается. Может кто-нибудь сказать мне, почему это, пожалуйста?

Любая помощь будет принята с благодарностью. Заранее спасибо.

// TestApp.mxml (application)
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx"
                       xmlns:com="com.*"
                       creationComplete="initApp()">
    <fx:Script>
        <![CDATA[
            import com.MyPopUp;

            import mx.managers.PopUpManager;
            protected function initApp():void
            {
                var popUp:MyPopUp = new MyPopUp();    

                PopUpManager.addPopUp(popUp, this);
            }    
        ]]>
    </fx:Script>
    <com:MyComp/>
</s:WindowedApplication>

// MyComp.mxml (component)
<?xml version="1.0" encoding="utf-8"?>
<s:VGroup xmlns:fx="http://ns.adobe.com/mxml/2009" 
          xmlns:s="library://ns.adobe.com/flex/spark" 
          xmlns:mx="library://ns.adobe.com/flex/mx"
          width="100%" height="100%"
          creationComplete="initComp()">
    <fx:Script>
        <![CDATA[
            import mx.controls.Alert;
            import mx.events.DynamicEvent;

            protected function initComp():void
            {
                trace('init MyComp()');

                this.addEventListener('myEvent', myEvent);
            }

            private function myEvent(event:DynamicEvent):void
            {
                trace('myEvent()');

                Alert.show('Event Called!', 'Success');
            }
        ]]>
    </fx:Script>
</s:VGroup>

// MyPopUp.mxml (component)
<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx" width="100" height="100">
    <fx:Script>
        <![CDATA[
            import mx.events.DynamicEvent;
            import mx.managers.PopUpManager;

            private function call(event:MouseEvent):void
            {
                trace('call()');

                PopUpManager.removePopUp(this);

                var evt:DynamicEvent = new DynamicEvent('myEvent');
                evt.value1 = '1234';

                dispatchEvent(evt);
            }
        ]]>
    </fx:Script>
    <s:Button click="call(event)" label="Call Event"/>
</s:Group>

1 Ответ

2 голосов
/ 13 сентября 2010

MyComp и MyPopup не находятся в одной иерархии списка отображения, поэтому событие всплытия не отображается.

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

...