用ActionScript創(chuàng)建可視化的Flex組件
本文和大家重點(diǎn)討論一下用ActionScript創(chuàng)建可視化的Flex組件,當(dāng)創(chuàng)建Flex組件完成后,你可以使用標(biāo)準(zhǔn)的賦值語(yǔ)句來(lái)重新設(shè)置Flex組件的屬性的值。
用ActionScript創(chuàng)建可視化的Flex組件
通過(guò)使用ActionScript中的new操作符你可以程序化的創(chuàng)建可視化的Flex組件,用同樣的方式你也可以創(chuàng)建任何ActionScript類的實(shí)例。創(chuàng)建后的Flex組件的屬性都有默認(rèn)的值,但是Flex組件此時(shí)并沒(méi)有父類和子類(包含各式各樣的DisplayObject),而且此時(shí)Flex組件并不在FlashPlayer或AdobeAIR的顯示列表中,因此無(wú)法在界面看到該Flex組件。當(dāng)創(chuàng)建Flex組件完成后,你可以使用標(biāo)準(zhǔn)的賦值語(yǔ)句來(lái)重新設(shè)置Flex組件的屬性的值。
◆如果你要把新創(chuàng)建的Flex組件添加到容器中去,必須使用容器的addChild()和addChildAt()方法,通過(guò)這種方法可以使得Flex組件變成Flex程序的顯示層級(jí)的一部分。當(dāng)Flex組件***次被添加到容器的時(shí)候,F(xiàn)lex組件的子實(shí)例就被創(chuàng)建了。在Flex組件的生命周期子實(shí)例創(chuàng)建的時(shí)候比較晚,因此你可以在子實(shí)例創(chuàng)建完成后設(shè)置它的屬性。
當(dāng)創(chuàng)建可視化組建的時(shí)候,你必須導(dǎo)入合適的包。在大多數(shù)情況下,這些包基本都在mx.controls包中,具體的你可以查閱AdobeFlexLanguageReference
下面的例子中,創(chuàng)建了一個(gè)Button控件并田間到HBox中去:
- <?xmlversionxmlversion="1.0"?>
- <!--usingas/ASVisualComponent.mxml-->
- <mx:Applicationxmlns:mxmx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml">
- <mx:Script><![CDATA[
- importmx.controls.Button;
- publicvarbutton2:Button;
- publicfunctioncreateObject():void{
- button2=newButton();
- button2.label="ClickMe";
- hb1.addChild(button2);
- }
- ]]></mx:Script>
- <mx:HBoxidmx:HBoxid="hb1">
- <mx:Buttonlabelmx:Buttonlabel="CreateObject"click="createObject()"/>
- </mx:HBox>
- </mx:Application>
Flex容器中新創(chuàng)建的元素將會(huì)排在容器的***。如果你并不像讓新創(chuàng)建的元素排在容器的***,可是使用addChildAt()方法來(lái)改變?cè)氐捻樞?。你也可以在調(diào)用addChild()方法后使用setChildIndex()方法來(lái)實(shí)現(xiàn),不過(guò)這樣做的話效率會(huì)降低。
你應(yīng)該為每個(gè)動(dòng)態(tài)創(chuàng)建的Flex組件定義實(shí)例變量并且將新創(chuàng)建的Flex組件的實(shí)例存儲(chǔ)在變量里,就像當(dāng)你為Flex組件的實(shí)例標(biāo)簽設(shè)置了id屬性的時(shí)候MXML編譯器所做的那樣。然后你就可以訪問(wèn)你剛才動(dòng)態(tài)創(chuàng)建的Flex組件。
◆如果要在程序中移除一個(gè)Flex組件,你需要使用removeChild()或removeChildAt()方法。你也可以使用removeAllChildren()方法來(lái)移除容器的所有Flex組件。調(diào)用這些方法并不是真正的刪除這些對(duì)象。如果你在程序沒(méi)有這些對(duì)象的任何引用,那么FlashPlayer的垃圾回收機(jī)制就會(huì)在將來(lái)的某個(gè)時(shí)間點(diǎn)進(jìn)行回收。如果在程序中存儲(chǔ)了該對(duì)象的引用,那么系統(tǒng)將會(huì)不從內(nèi)存中移除該對(duì)象。
在有些情況下,你是通過(guò)使用MXML標(biāo)簽來(lái)定義Flex組件的。你可以設(shè)置容器的creationPolicy屬性為none來(lái)延遲容器中Flex組件的實(shí)例化。為了創(chuàng)建那些用標(biāo)簽定義了但沒(méi)有實(shí)例化的Flex組件,你可以使用createComponentFromDescriptor()和createComponentsFromDescriptors()方法。使用這些方法可以讓你程序化的創(chuàng)建Flex組件而不是聲明化的。
可以支持addChild()方法的Flex組件是UIComponent。換句話說(shuō),如果你創(chuàng)建了一個(gè)并不是mx.core.UIComponent的子類的對(duì)象,在你將該對(duì)象添加到容器之前你必須用UIComponent封裝該對(duì)象。下面的例子中,創(chuàng)建了并不是UIComponent子類的Sprite對(duì)象,在將該對(duì)象添加到Panel容器之前將對(duì)象添加為UIComponent的子對(duì)象:
- <?xmlversionxmlversion="1.0"?>
- <!--usingas/AddingChildrenAsUIComponents.mxml-->
- <mx:Applicationxmlns:mxmx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml">
- <mx:Script><![CDATA[
- importflash.display.Sprite;
- importmx.core.UIComponent;
- privatevarxLoc:int=20;
- privatevaryLoc:int=20;
- privatevarcircleColor:Number=0xFFCC00;
- privatefunctionaddChildToPanel():void{
- varcircle:Sprite=newSprite();
- circle.graphics.beginFill(circleColor);
- circle.graphics.drawCircle(xLoc,yLoc,15);
- varc:UIComponent=newUIComponent();
- c.addChild(circle);
- panel1.addChild(c);
- xLoc=xLoc+5;
- yLoc=yLoc+1;
- circleColor=circleColor+20;
- }
- ]]></mx:Script>
- <mx:Panelidmx:Panelid="panel1"height="250"width="300"verticalScrollPolicy="off"/>
- <mx:Buttonidmx:Buttonid="myButton"label="ClickMe"click="addChildToPanel();"/>
- </mx:Application>
【編輯推薦】
- 學(xué)習(xí)筆記 如何使用Flex組件進(jìn)行開(kāi)發(fā)
- AS方式重寫(xiě)Flex組件常規(guī)步驟
- 技術(shù)前沿 看Flex客戶端緩存技術(shù)如何使用
- 解析Flex全屏模式設(shè)置方法
- Flex內(nèi)存泄露解決方法和內(nèi)存釋放優(yōu)化原則