2009年4月30日 星期四

「引用」Flex中自定義事件

出處
事件是一個非常有用的功能,通常用於信息傳遞交互大大提高程序編寫的靈活性。在高級語言中都會集成這方面特性;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>



其實自定義事件的現實也很簡單,但起著非常重要的作用;正是因為有了事件的機制,使得大部分重複的功能抽取到自定義控件中,從而達到一個很高的代碼重用性。

【下列文章您可能也有興趣】

沒有留言: