1. 程式人生 > >Flex自定義事件、傳值

Flex自定義事件、傳值

定義自己的Event類:MyEvent

package com
{
	import flash.events.Event;
	import flash.events.EventDispatcher;
	
	public class MyEvent extends Event
	{
		public static const EVENT_TEST:String = "EventTest";
		
		public var data:Object;
		
		public static const dis:EventDispatcher = new EventDispatcher();
		
		public function MyEvent(type:String,bubbles:Boolean = false,canceable:Boolean = false,data:Object = null)
		{
			super(type,bubbles,canceable);
			this.data = data;
		}
		
	}
}
測試頁面:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
				layout="absolute"
				xmlns:test="com.*"  >
	<mx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import com.MyEvent;
			
			/*事件的執行過程:
			 * 1.為自定義事件類的EventDispatcher新增監聽
			 * 2.例項化自定義事件
			 * 3.為事件的data賦值(用來把值傳遞給監聽)
			 * 4.監聽處理事件返回的物件
			 
			 * 這裡面的設定的MyEvent.EVENT_TEST值的作用是
			 * 提供了一個監聽器監聽事件型別的標誌,因為可能
			 * 我們會使用一個自定義事件類傳遞多種值,這個時
			 * 候不同種類的值之間的識別就需要通過事件的型別
			 * 來區別了
			 */
			
			private function test():void {
			    //為事件新增監聽
				MyEvent.dis.addEventListener(MyEvent.EVENT_TEST,onEnd);
				setValue();
			}
			
			private function setValue():void {
				//例項化一個事件,併為data賦值
				var e:MyEvent = new MyEvent(MyEvent.EVENT_TEST,false,false,'dada');
				//把事件派發出去
				//注意這裡需要使用的是自己的派發器,而不能使用此類做自帶的派發方法dispatch();
				MyEvent.dis.dispatchEvent(e);
			}
			
			private function onEnd(e: MyEvent):void {
				//處理事件返回的值
				Alert.show(e.data.toString());
			}
			
		]]>
	</mx:Script>
	
	<mx:Button label="Test" id="btn" click="test()"/>
</mx:Application>