學習筆記 如何使用Flex組件進行開發
本文和大家重點討論一下使用Flex組件開發,Flex提供了幾種技術來使用可視化的控件和容器來開發,包括了用ActionScript引用Flex控件以及操控控件和容器的實例的屬性。
使用Flex組件開發
在Flex應用程序中ActionScript的最主要的用處大概就是使用可視化的控件和容器來開發了。Flex提供了幾種技術來完成這樣工作,包括了用ActionScript引用Flex控件以及操控控件和容器的實例的屬性。
引用Flex組件
為了在ActionScript中使用Flex組件,我們一般要在MXML標簽中給Flex組件定義一個id屬性。例如,下面的代碼中,我們設置了Button控件的id屬性為”myButton”:
- <mx:Buttonidmx:Buttonid="myButton"label="ClickMe"/>
◆如果你并不像通過使用ActionScript來操控這個Flex組件,那么這個屬性是可有可無的。
這段代碼使得MXML編譯器自動生成一個包含了Button實例的引用的名字為myButton的公共變量。你可以在ActionScript中通過使用這個自動生成的變量來操控Flex組件。你可以在任意的ActionScript類或代碼塊中通過Flex組件的id來明確的引用Button控件的實例。通過引用Flex組件的實例,你可以修改Flex組件的屬性并且調用Flex組件的方法。
例如,下面的ActionScript代碼塊中,當用戶點擊了按鈕的時候,程序就會改變Button控件的label屬性的值:
- <?xmlversionxmlversion="1.0"?>
- <!--usingas/ButtonExample.mxml-->
- <mx:Applicationxmlns:mxmx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml">
- <mx:Script><![CDATA[
- privatefunctionsetLabel():void{
- if(myButton.label=="ClickMe"){
- myButton.label="Clicked";
- }else{
- myButton.label="ClickMe";
- }
- }
- ]]></mx:Script>
- <mx:Buttonidmx:Buttonid="myButton"label="ClickMe"click="setLabel();"/>
- </mx:Application>
所有的MXMLFlex組件的id屬性,無論它們嵌套的有多深,生成的都是已經定義好的Flex組件的公共變量。因此,在文檔中所有的id屬性必須是***的。這也意味著,如果你指定了Flex組件實例的id屬性,你就可以在程序的任意地方來操控Flex組件:函數,外部的類文件,導入的ActionScript文件,或者內嵌代碼。
◆如果Flex組件并沒有id屬性,你可以通過使用Flex組件的容器的一些方法來引用該Flex組件。比如getChildAt()和getChildByName()方法。
你可以參照目前內附文件或者當前對象來使用這樣的關鍵字。
你也可以通過使用跟Flex組件名稱一樣的字符來引用Flex組件。要在程序中使用對象,你可以通過使用方括號,方括號內存放的就是跟Flex組件名稱一樣的字符串。這樣你就得到了該對象的引用。
下面的例子中,通過使用字符串來獲取對象的引用,然后改變每個Button控件的樣式:
- <?xmlversionxmlversion="1.0"?>
- <!--usingas/FlexComponents.mxml-->
- <mx:Applicationxmlns:mxmx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml">
- <mx:Script><![CDATA[
- privatevarnewFontStyle:String;
- privatevarnewFontSize:int;
- publicfunctionchangeLabel(s:String):void{
- s="myButton"+s;
- if(this[s].getStyle("fontStyle")=="normal"){
- newFontStyle="italic";
- newFontSize=18;
- }else{
- newFontStyle="normal";
- newFontSize=10;
- }
- this[s].setStyle("fontStyle",newFontStyle);
- this[s].setStyle("fontSize",newFontSize);
- }
- ]]></mx:Script>
- <mx:Buttonidmx:Buttonid="myButton1"
- click="changeLabel('2')"
- label="ChangeOtherButton'sStyles"
- />
- <mx:Buttonidmx:Buttonid="myButton2"
- click="changeLabel('1')"
- label="ChangeOtherButton'sStyles"
- />
- </mx:Application>
這個小技巧有著比較特殊的用處,當你在用Repeater控件或用ActionScript創建了一個對象的時候,你不必知道對象的名字你也可以在運行時來引用該對象。但是,當你用ActionScript實例化一個對象的時候,如果要添加該對象到應用程序的屬性數組(按本人的理解:該數組為應用程序的數組,包含程序中定義的Flex組件的實例)中去,你必須定義該變量為public并且要在整個的類的作用域范圍定義,而不是在函數的內部定義。
【編輯推薦】