Flex事件分發
本文和大家重點討論一下Flex事件分發的概念,在分發事件時,將會分發一個事件對象出去。不管是那個事件類,都是繼承自flash.events.Event對象的,他包含一些比較重要的屬性,type和bubbles。
Flex事件分發
最終繼承自EventDispatcher的對象都會含有dispatchEvent這個方法,他有一個參數,事件對象。之前說到的事件注冊通道,他只是一個通道,實際上事件是由這個方法來分發出去的,通道只是一個管道而已。
他的作用就是分發一個事件對象,他的分發是沒有目的的,一種廣播形式的,Flex的事件監聽線程會接收到各種各樣的事件(我們稱之為捕獲事件,這在后面會介紹到),那么哪種才是你要的事件,標識就通過事件的type屬性來區分。
自定義Flex事件分發
這部分就不長篇大論了,因為各位應該已經掌握了事件的原理,因此貼出演示源碼,并進行些簡單的解釋。
1.自定義Flex事件components/MyEventTest.as
- packagecomponents
- {
- importmx.events.FlexEvent;
- publicclassMyEventTestextendsFlexEvent
- {
- publicstaticconstONCHANGE:String="onChange";
- publicvareventInfo:String;//自定義的事件信息
- publicfunctionMyEventTest(s:String){
- super(s);//如果在構造時不設bubbles,默認是false,也就是不能傳遞的。
- eventInfo="這個事件是:"+s;
- }
- }
- }
2.自定義組件components/ComponentForEvent.as
- packagecomponents
- {
- importflash.events.EventDispatcher;
- //這個就是聲明事件注冊通道的方法了。name是事件對應的名稱,也就是之前提到的type。Type是該事件的類
- [Event(name="onChange",type="components.MyEventTest")]
- publicclassComponentForEventextendsEventDispatcher
- {
- privatevarname:String;
- publicfunctionchangeName(newName:String){
- this.name=newName;
- dispatchEvent(newMyEventTest(MyEventTest.ONCHANGE));
- }
- }
- }
3.自定義Flex事件分發中App.mxml代碼
- <?xmlversionxmlversion="1.0"encoding="utf-8"?>
- <mx:Applicationxmlns:mxmx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"
- layout="absolute"xmlns:comp
- >
- <mx:Script>
- <![CDATA[
- importmx.controls.Alert;
- privatefunctionchangeName(){
- cfe.changeName("新名稱");
- }
- ]]>
- </mx:Script>
- <mx:Buttonidmx:Buttonid="testBtn"click="changeName()"label="測試"/>
- <components:ComponentForEvent
- id="cfe"/>
- </mx:Application>
【編輯推薦】
- 解析Flex事件機制中Flex事件分發和監聽
- FlexBuilder4十大新特性閃亮登場
- Flex框架中Cairngorm和Mate的優點大比拼
- FlexBuilder3.0與Eclipse3.4的完美結合
- 解析Flex應用開發步驟 新特性和技術框架