? 事件是一个非常有用的功能,通常用于信息传递交互大大提高程序编写的灵活性。在高级语言中都会集成这方面特性;Flex也不例外几乎所有控件中都集成了大量的事件,如果Button的Click事件等。但实际应用中控件自有的事件是不能满真实需要的,特别在自己编写自定义控件时,自定义控件内部信息的改变如何及时通知所在的容器变得很更要;这个时候自定义事件就起到它的作用。
?????? 在Flex中定义事件有两中情况,分别是ActionScript和MXML中定义。
?????? 在ActionScript中定义:
?????? [Event(name="myEnableEvent",type="flash.events.Event")]
public class MyComponent extends UIComponent
{
??? ?????? ...
}
在MXML中定义:
<mx:Metadata>
??? [Event(name="DataChange",type="DataChangeEvent")]
</mx:Metadata>
?
DataChangeEvent事件参数的定义:
import flash.events.Event;
public class DataChangeEvent extends flash.events.Event
{
?????? public function DataChangeEvent()
?????? {
????????????? super("DataChange");
?????? }
?????? public var Data:Object;
}
?
在自定义控件中定义和触发事件:
<?xml version="1.0" encoding="utf-8"?>
<mx:Form xmlns:mx="http://www.adobe.com/2006/mxml" width="212" height="56">
?<mx:Metadata>
??????? [Event(name="DataChange",type="DataChangeEvent")]
??? </mx:Metadata>
?<mx:Button label="Button" click="Change()"/>
?????? <mx:Script>
????????????? <![CDATA[
???????????????????? function Change():void
???????????????????? {
??????????????????????????? this.dispatchEvent(new DataChangeEvent());
???????????????????? }
????????????? ]]>
?????? </mx:Script>
</mx:Form>
?
容器接收相关自定义控件事件:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ns1="*">
??????
?????? <ns1:EmployeeCombo x="146" y="132" DataChange="onChange(event)" >
?????? </ns1:EmployeeCombo>
?????? <mx:Script>
????????????? <![CDATA[
???????????????????? import mx.controls.Alert;
???????????????????? function onChange(e:DataChangeEvent)
???????????????????? {
???????????????????????????
???????????????????? }
????????????? ]]>
?????? </mx:Script>
</mx:Application>
?
其实自定义事件的现实也很简单,但起着非常重要的作用;正是因为有了事件的机制,使得大部分重复的功能抽取到自定义控件中,从而达到一个很高的代码重用性。
?
http://www.nbao.net/
http://smark.codeplex.com/