2009年3月3日 星期二

FLEX中自定義組件

  有了Flex Builder的幫助,自定義一個Flex組件非常簡單,所以不用多講了,但如何提高組件的重用性,這才是我們製作組件的目的。

緊耦合元件與松耦合元件

  為了使元件在程式中可以配置和重用,你可能會想要創建可以接受屬性,創建方法以及分派事件的MXML元件。為了做到這樣,元件必須不依賴于特定的程 序(緊耦合),包括它們的變數名或標籤實例的名字。緊耦合情況下如果程式或者元件的代碼改變了,相應的代碼就不能再工作,我們必須修改緊耦合的元件來相應 這些變化。
  一種更清晰也更好的方式是開發松耦合的元件,它可以分派傳播返回資料給程式的事件並且包含一些屬性使得可以從程式傳送資訊給它。
這種方式可以讓你像創建黑盒子一樣創建MXML元件,並且有以下好處:

它們容易重用和維護
除了內部的元件它們不瞭解其他的東西
它們不依賴於一個變數名和標籤實例的名字

  如我們所說的那樣,為了創建一個松耦合的元件我們需要屬性來存儲資訊,需要一個事件模型來分派包含有返回資料的事件。

  屬性經常在ActionScript中定義(儘管你可以在MXML中定義它們)並且放在一個<mx:Script>塊中:

<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;

[Bindable]
public var lista:ArrayCollection;
]]>
</mx:Script>

定義MXML元件的方法也是一樣:

<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;

[Bindable]
public var lista:ArrayCollection;


public function justWrite():String
{
return "This is a method of the component";
}
]]>
</mx:Script>

設計一個松耦合元件的最後一步是處理包含返回資料的事件的分派。每個自定義MXML元件都可分派事件,事件可以通過三個簡單的步驟自定義:

使用[Event]元資料標籤
創建一個事件物件
分派事件並創建一個函數來處理該事件

[Event]元資料標籤定義了元件可以分派的事件。可以在一個ActionScript類中包定義之後類定義之前聲明[Event]元資料標籤:

Package com.casario
{
[Event(name=“changeBlog”, type=“flash.events.Event”)]
public class custComp
{


}
}

或者在MXML檔中的<mx:Metadata>標籤中:

<mx:Metadata>
[Event(name=“changeBlog”, type=“flash.events.Event “)]
</mx:Metadata>

一旦[Event]元資料標籤創建,元件就可以使用dispatchEvent()方法來分派該事件。dispatchEvent()方法將事件物件作為參數,如下面的代碼中所示:

dispatchEvent(new Event(“changeBlog”));

沒有留言:

張貼留言