老調(diào)長談的Flex4.6可視組件的生命周期-創(chuàng)新互聯(lián)

本文參考Adobe flex 4.6 help,寫作目的僅為了個人加強(qiáng)記憶與體會

10年積累的成都網(wǎng)站設(shè)計、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先做網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有錦江免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

Flex 4以上版本中,可視組件分為spark和halo兩套,spark用組件類和皮膚類的分離大大提高了對自定義外觀的支持,特別是對于某些子皮膚部件移動位置改變布局的自定義外觀,再也不需要大費(fèi)周章的重寫組件的updateDisplay方法了。

兩套組件在生命周期上其實(shí)差別不大

spark組件
var btn:Button=new Button();
btn.label="按鈕";

var box:VGroup=new VGroup();
box.addElement(btn);
Halo組件
var btn:Button=new Button();
btn.label="按鈕";

var box:VBox=new VBox();
box.addChild(btn);

1、調(diào)用構(gòu)造函數(shù)

var btn:Button=new Button();

2、設(shè)置組件屬性

btn.label="按鈕";

設(shè)置屬性可能會調(diào)用組件的相關(guān)失效方法如

invalidateProperties,invalidateSize,

invalidateSkinState(僅spark SkinnableComponent組件),invalidateDisplayList;

需要注意的是,如果此時可視組件并未添加到舞臺,則組件的nestLevlel為0,即使調(diào)用了以上失效方法,LayoutManager也不會把組件添加到驗(yàn)證序列,也就是說,相關(guān)的驗(yàn)證方法(commitProperties、measure、updateDisplayList)也并不會在下一個渲染事件時執(zhí)行。而是會等到該可視組件添加到舞臺之后,重新設(shè)置UIComponent的nestLevel時,再調(diào)用updateCallbacks方法,才會調(diào)用LayoutManager的失效方法把該可視組件添加到驗(yàn)證序列中,等到下一個render事件(或是ENTER_FRAME事件)中調(diào)用組件的相關(guān)驗(yàn)證方法

3、把可視組件添加到舞臺

spark組件使用addElement,Halo組件使用addChild。

4、設(shè)置組件的parent屬性

5、計算組件的style設(shè)置

6、組件調(diào)度preinitialize事件

7、組件調(diào)用createChildren方法

Halo組件在createChildren方法中創(chuàng)建子組件,并偵聽子組件的相關(guān)事件。

而spark SkinnableComponent組件在createChildren方法中調(diào)用validateSkinChange→再調(diào)用attachSkin方法,在attachSkin方法中創(chuàng)建skin,添加到組件類顯示列表上,然后調(diào)用findSkinParts方法,循環(huán)skin實(shí)例中的皮膚部件,把每個皮膚部件的id和皮膚部件實(shí)例對象本身作為參數(shù)調(diào)用partAdded方法,組件開發(fā)者一般在partAdded方法中給皮膚部件添加事件偵聽。findSkinParts完成后,會調(diào)用invalidateSkinState方法(該方法僅檢測skinStateIsDirty布爾標(biāo)志變量是否為true,不為true則設(shè)為true,調(diào)用invalidateProperties方法)

8、調(diào)用失效方法

invalidateProperties,invalidateSize,

invalidateSkinState(僅spark SkinnableComponent組件),invalidateDisplayList;

9、組件調(diào)度initialize事件,此時子組件已創(chuàng)建完畢,但尚未布局、設(shè)置尺寸。

10、父容器組件調(diào)度elementAdd(spark)或childAdd(Halo)事件

11、父容器組件調(diào)度initialize事件

12、在SystemManager(Flex程序的真正主類)的下一個render事件調(diào)度時,組件調(diào)用相關(guān)的驗(yàn)證方法如

commitProperties,measure(如果設(shè)置了顯示尺寸值,則不會調(diào)用),updateDisplayList。

spark SkinnableComponent組件的commitProperties方法會檢測skinStateIsDirty布爾標(biāo)志變量,如果為true,則會調(diào)用getCurrentSkinState方法獲取skin應(yīng)有的可視狀態(tài)State,然后將其設(shè)為skin的currentState屬性

13、如果在驗(yàn)證方法調(diào)用的過程中,再次調(diào)用了失效方法,則會在SystemManager的再下一個render事件中,再次調(diào)用組件的驗(yàn)證方法

14、最后一個render事件中,組件的驗(yàn)證方法(沒有再次調(diào)用失效方法)執(zhí)行完畢后,設(shè)置組件visible為true,調(diào)度creationComplete事件(僅在組件創(chuàng)建完成時調(diào)度一次)

15、調(diào)度updateComplete事件??梢暯M件每次因?yàn)椴季帧⑽恢?、尺寸等變化而更新組件顯示完成后,都會調(diào)度updateComplete事件

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

當(dāng)前名稱:老調(diào)長談的Flex4.6可視組件的生命周期-創(chuàng)新互聯(lián)
文章地址:http://bm7419.com/article18/dgdedp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、Google、自適應(yīng)網(wǎng)站企業(yè)建站、網(wǎng)站內(nèi)鏈網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司