天天看點

Flex建立和配置設定事件1.建立和配置設定普通事件2.自定義事件類 }3.事件冒泡

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()。