Flex创建和分配事件

来源:互联网 发布:淘宝企业店可以贷款吗 编辑:程序博客网 时间:2024/04/29 22:51

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



原创粉丝点击