Apache flex Flex4:事件侦听器已创建,但未被调用?

Apache flex Flex4:事件侦听器已创建,但未被调用?,apache-flex,actionscript-3,actionscript,flex4,Apache Flex,Actionscript 3,Actionscript,Flex4,我正在尝试调用在另一个组件中创建的事件。我在方法中添加了trace(),以便查看调用的内容。正在调用除事件侦听器(myEvent)之外的所有内容。谁能告诉我这是为什么吗 任何帮助都将不胜感激。提前谢谢 // TestApp.mxml (application) <?xml version="1.0" encoding="utf-8"?> <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"

我正在尝试调用在另一个组件中创建的事件。我在方法中添加了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>
//TestApp.mxml(应用程序)
//MyComp.mxml(组件)
//MyPopUp.mxml(组件)

MyComp和MyPopup不在同一个显示列表层次结构中,因此看不到冒泡事件


如果您想以这种方式跨组件发送消息,请考虑使用某种全局事件调度器,使用两个组件之间的共享模型来查看数据更改。< /P>我是Flex的新成员,请您提供一些例子来说明您的意思吗?有没有任何框架可以轻松做到这一点?向FlexGlobals.application添加事件侦听器(我使用的是3.5,所以我忘记了正确的属性名称)或创建I/EventDispatcher的单例实现是两种不那么优雅的方法,但对于小型应用程序来说,这是一种快速的解决方案。将EventBus.addEventListener()和EventBus.dispatchEvent()结合使用效果非常好!非常感谢+1 :)