Apache flex Flex4:事件侦听器已创建,但未被调用?
我正在尝试调用在另一个组件中创建的事件。我在方法中添加了trace(),以便查看调用的内容。正在调用除事件侦听器(myEvent)之外的所有内容。谁能告诉我这是为什么吗 任何帮助都将不胜感激。提前谢谢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"
// 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 :)