电竞比分网-中国电竞赛事及体育赛事平台

分享

Flex 2 中的元數(shù)據(jù)標簽

 smoking_boy 2007-06-11
Flex 2 中的元數(shù)據(jù)標簽

                                                    ——告訴編譯器如何編譯

雖然多數(shù)Flex開發(fā)者都使用過[Bindable]標簽,但是很多人都不知道這個標簽的作用甚至不知道該標簽為何物。[Bindable]就是所謂的元數(shù)據(jù)標簽。元數(shù)據(jù)標簽是一種特殊的標簽,它在代碼中的作用就是向編譯器提供如何編譯程序的信息。實際上,這些標簽并沒有被編譯到生成的SWF文件中,而只是告訴編譯器如何生成SWF文件。文檔中列出的元數(shù)據(jù)標簽共有12個,本文將講解這些元數(shù)據(jù)標簽的定義并給出使用它們的示例,在看完這篇文章之后,你就會明白應該在何時何處在你的Flex 2應用程序中使用元數(shù)據(jù)標簽了。

[ArrayElementType]

實際上,定義一個數(shù)組通常來說是一件很平常的事情,因為數(shù)組中的元素可以是任何類型的。不過,使用ArrayElementType元數(shù)據(jù)標簽可以讓你定義數(shù)組元素的數(shù)據(jù)類型。下面的例子展示了如何使用[ArrayElementType]:

程序代碼 程序代碼
   [ArrayElementType("String")]
    public var arrayOfStrings:Array;

    [ArrayElementType("Number")]
    public var arrayOfNumbers:Array;

    [ArrayElementType("mx.core.UIComponent")]
    public var arrayOfUIComponents:Array;


[Bindable]

Bindable元數(shù)據(jù)標簽是最經(jīng)常用到的一個元數(shù)據(jù)標簽,因為它使程序組件之間的數(shù)據(jù)同步變得很容易。Bindable可以用來綁定簡單數(shù)據(jù)類型、類、復雜數(shù)據(jù)類型以及函數(shù)。綁定數(shù)據(jù)的時候,你必須先使用元數(shù)據(jù)標簽定義一下數(shù)據(jù),正如Listing 1中所示的那樣。

Bindable也可以用來綁定到事件。Listing 2展示了如何使用getter和setter函數(shù)將一個屬性綁定到一個事件上。這個例子中有一個叫做phoneNumber的私有變量,還有一個公有的setter和getter函數(shù)。使用Bindable標簽將這個getter方法綁定到了一個叫做phoneNumberChanged的事件上,只要數(shù)據(jù)發(fā)生改變setter方法就會分派phoneNumberChanged事件。通過使用setter方法,可以在數(shù)據(jù)賦予私有變量之前對其進行操作。在這個例子中,數(shù)據(jù)只有在長度大于等于10的時候才會被格式化。當phoneNumberChanged事件被分派的時候,第二個TextInput組件會被更新,因為他的text屬性綁定到了phoneNumber變量上。

[DefaultProperty]

DefaultProperty元數(shù)據(jù)標簽用來將一個單一屬性設定為某個類的默認屬性。它允許在一個容器標簽內設定屬性,而不用定義屬性的名字。一個簡單的例子就是一個自定義Button類。Listing 3展示了一個簡單的Button類,它將label屬性設定為了DefaultProperty。Listing 4展示了label屬性是如何在自定義Button標簽中作為一個字符串定義的。

[Embed]

Embed元數(shù)據(jù)標簽用來導入圖片到程序??梢酝ㄟ^兩種方式使用Embed。你可以將圖片嵌入到ActionScript中并將其指派給一個變量(如同下面代碼中的第一個例子),或者你也可以將圖片直接指派給組件的屬性(使用下面代碼中的第二個例子所示的語法規(guī)則)。

例1:
程序代碼 程序代碼
[Embed(source="myIcon.gif")]
[Bindable]
public var myIcon:Class;

<mx:Button label="Icon Button 1" icon="{myIcon}"/>
<mx:Button label="Icon Button 2" icon="{myIcon}"/>


例2:
程序代碼 程序代碼
<mx:Button label="Icon Button 1" icon="@Embed(source=myIcon.gif‘)"/>

<mx:Button label="Icon Button 2" icon="@Embed(source=myIcon.gif‘)"/>


上面這兩個例子產(chǎn)生的結果是一樣的。創(chuàng)建myIcon類的好處是,它在一個類中只定義一次并可以綁定到程序中的多個組件。

[Event]

Event元數(shù)據(jù)標簽用來聲明那些被自定義類分派的事件。將這個元數(shù)據(jù)標簽添加到類定義中之后,你就可以在MXML標簽中添加事件處理函數(shù)來初始化該自定義類。Listing 5創(chuàng)建了一個自定義Button類,每當它的label屬性改變的時候就會分派一個事件。Listing 6所顯示的主程序文件初始化了這個自定義Button并創(chuàng)建了事件處理函數(shù),該函數(shù)將新的labe屬性值賦給了一個TextArea組件以顯示當前發(fā)生的更改。

[Effect]

Effect元數(shù)據(jù)標簽用來定義一個自定義效果,當某個事件發(fā)生的時候該效果會被分派。這個示例可以基于前面Event的例子來創(chuàng)建,通過簡單地更改ButtonLabel類(Listing 7)中的一行代碼,就定義了一個效果,該效果可以在MXML標簽中直接使用(Listing 8)。

[IconFile]

IconFile是用來定義一個jpg,gif或者png文件的文件名的,它在你的自定義類中作為圖標來使用。[Embed]元數(shù)據(jù)標簽可以用來嵌入圖片、SWF文件、音樂文件以及視頻文件等,而IconFile則只是用來嵌入用來作為自定義類圖標的文件。下面是一個IconFile的例子:

程序代碼 程序代碼
[IconFile("icon.png")]
public class CustomButton extends Button
{

}


[Inspectable]

在使用Flex Builder 2的時候,你可能會希望某些自定義組件的屬性在代碼提示和屬性檢查器(property inspector)中顯示,Inspectable元數(shù)據(jù)標簽就是用來定義那些屬性的。Listing 9展示的例子定義了一個inspectable的ccType變量,它定義了Visa為默認值、Credit Card為類別并將取值范圍定義為包含了Visa, Mastercard, Discover, 和 American Express的枚舉。

[InstanceType]

當在一個模板對象中聲明一個像IDeferredInstance這樣的變量時,InstanceType元數(shù)據(jù)標簽就用來聲明對象的類型。下面是InstanceType的用法:

程序代碼 程序代碼
[InstanceType("package.className")]


[NonCommittingChangeEvent]

NonCommittingChangeEvent元數(shù)據(jù)標簽在某個特定事件發(fā)生的時候可以防止變量在事件發(fā)生的過程中被更改。Listing 10展示了它是如何工作的。一個名為s的字符串類型的私有變量被綁定到了名為ti2的TextInput組件上。另外一個id為ti1的TextInput組件在它的text發(fā)生更改的時候就會將s的值設置為它的text屬性的值。另外,當triggerBinding 事件被分派的時候,附加在s變量上的Binding元數(shù)據(jù)標簽就會進行綁定。只有在Enter鍵在ti1 TextInput組件中被按下時才會分派triggerBinding事件。

[RemoteClass]

RemoteClass可以用來將一個ActionScript類綁定到一個Java類或一個ColdFusion CFC。這樣做可以自動轉換數(shù)據(jù)類型。下面的例子將包com.mydomain中的名為MyClass的ActionScript類綁定到了同一個包中名為MyClass的Java類:

程序代碼 程序代碼
package com.mydomain {
   [Bindable]
   [RemoteClass(alias="com.mydomain.MyClass")]
   public class MyClass {
     public var id:int;

     public var myText:String;

   }
}


[Style]

Style元數(shù)據(jù)標簽用來為組件定義自定義樣式屬性的。只需要簡單地將Sytle元數(shù)據(jù)標簽添加到類的定義當然,然后就可以使用getSytle方法獲取它的值了。Listing 11 和 12中的例子定義了兩個樣式,分別為borderColor 和fillColor,它們的數(shù)據(jù)類型都是uint。當類初始化的時候這兩個樣式就會在標簽中被設定。代碼中覆寫了updateDisplayList函數(shù),用自定義的樣式畫了一個圓形邊框并將其填充。

現(xiàn)在你應該會有這樣的感覺了:“喔,現(xiàn)在我知道在哪里可以使用它們了”或者“嗯,我想我會在新的項目中嘗試使用這些元數(shù)據(jù)標簽”。如果你沒有,那么你可能需要回過頭去再看一遍這篇文章。OK,我想說的是Adobe Flex小組提供給我們的元數(shù)據(jù)標簽不只是非常的強大,可以讓我們擴展或自定義我們要做的東西,而且它還非常易于使用。通過使用它們,僅僅幾行代碼就可以完成一大堆事情。如果不使用這些標簽,你會發(fā)現(xiàn)在Flex 2中實現(xiàn)一些東西是很辛苦的。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多