1.建立和配置設定普通事件
舉例說明
OkayCancelGroup.mxml檔案,定義一個元件。
<?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" >
<s:layout>
<s:HorizontalLayout/>
</s:layout>
<fx:Metadata>
[Event(name="userAccept",type="flash.events.Event")]//為此元件聲明事件類型,不聲明則元件不能監聽userAccept類型事件
[Event(name="userCancel",type="flash.events.Event")]
</fx:Metadata>
<fx:Script>
<![CDATA[
protected function ok_clickHandler(event:MouseEvent):void
{
var e:Event = new Event("userAccept");//建立事件,以userAccept為類型
dispatchEvent(e);//配置設定事件
}
protected function cancel_clickHandler(event:MouseEvent):void
{
var e:Event = new Event("userCancel");//建立事件,以userCancel為類型
dispatchEvent(e);//配置設定事件
}
]]>
</fx:Script>
<s:Button id="ok" label="Ok" click="ok_clickHandler(event)" />
<s:Button id="cancel" label="Cancel" click="cancel_clickHandler(event)"/>
</s:Group>
兩個按鈕的click事件處理函數中建立了事件并且配置設定了事件。
元件使用并監聽建立的事件的代碼
<components:OkayCancelGroup id="okCancelGroup" left="219" bottom="22" userAccept="okCancelGroup_userAcceptHandler(event)" userCancel="okCancelGroup_userCancelHandler(event)"/>
在一個父元件的MXML檔案定義如上,監聽userAccept和userCancel事件,并定義相應處理函數。
2.自定義事件類
上面的例子使用Event時間類,能夠自己定義的隻有type(userAccept和userCancel),不能攜帶更多資料,隻支援最基本的事件屬性。
如果需要事件傳遞更多的資料,可以繼承flash.events.Event類.
UserAcknowledgeEvent.as
package events
{
import flash.events.Event;
public class UserAcknowledgeEvent extends Event
{
public var timestamp:Date;
public function UserAcknowledgeEvent(type:String,timestamp:Date, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
this.timestamp = timestamp;
}
override public function clone():Event{
return new UserAcknowledgeEvent(type,timestamp);
}
}
}
UserAcknowledgeEvent繼承于Event,多儲存了一個事件的時間,使用方法流程和普通Event一樣。
3.事件冒泡
如果想要自定義事件能夠被元件的父元件捕獲并處理,需要将事件的屬性bubbles指定為true。這樣事件就是個冒泡事件,能夠被父元件捕獲。
當然父元件也需要定義能夠捕獲的事件類型。上例中需要在父元件中加入:
<fx:Metadata>
[Event(name="userAccept",type="events.UserAcknowledgeEvent")]
[Event(name="userCancel",type="events.UserAcknowledgeEvent")]
</fx:Metadata>
然後在事件處理函數中dispatchEvent()。