天天看点

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