读书人

自定义事件无效解决方法

发布时间: 2012-02-27 10:00:22 作者: rapoo

自定义事件无效
看了网上的方法,照着做,可是不行,完全看不出问题在哪,高手指教。
DataChangeEvents.as

Java code
package events{    import flash.events.Event;    public class DataChangeEvent extends Event    {        public function DataChangeEvent()        {            super("DataChangeEvent");        }    }}


show.mxml
HTML code
<?xml version = "1.0" encoding = "utf-8"?><mx:Canvas xmlns:mx = "http://www.adobe.com/2006/mxml"           width = "400"           height = "300">    <mx:Script>        <![CDATA[            import events.DataChangeEvent;            public function clickHandler(evt:MouseEvent):void            {                trace("create and dispatch DataChangeEvent");                dispatchEvent(new DataChangeEvent());            }        ]]>    </mx:Script>    <mx:Metadata>        [Event(name="DataChange", type="events.DataChangeEvent")]    </mx:Metadata>    <mx:LinkButton x = "136"                   y = "101"                   label = "Click Me"                   click = "clickHandler(event)"/></mx:Canvas>


CustomEvent.mxml
HTML code
<?xml version = "1.0" encoding = "utf-8"?><mx:Application xmlns:mx = "http://www.adobe.com/2006/mxml"                layout = "absolute"                xmlns:com = "components.*">    <mx:Script>        <![CDATA[            import events.DataChangeEvent;            public function dataChangeHandler(evt:DataChangeEvent):void            {                trace("dataChangeHandler: " + evt.toString());            }        ]]>    </mx:Script>    <com:show DataChange = "dataChangeHandler(event)"              click = "trace('clicked');">    </com:show></mx:Application>

主要是在CustomEvent.mxml中无法捕获自定义事件

[解决办法]
这个简单,可是分数太少了,,,
太粗心了,你自定义事件类指定的事件类型是:DataChangeEvent
而你在元标签指定的“DataChange”事件类型,只能监控到DataChangeEvent事件,不能监听到DataChange事件,
最简单的修改方法是
<mx:Metadata>
[Event(name="DataChangeEvent", type="events.DataChangeEvent")]
</mx:Metadata>


<com:show DataChangeEvent= "dataChangeHandler(event)"
click = "trace('clicked');">

</com:show>

读书人网 >flex

热点推荐