關於組件實例化的生命週期

     組件實例化生命週期描述了用組件類創建組件對象時所發生的一系列步驟.作爲生命週期的一部分,Flex 自動調用組件的方法,發出事件,並使組件可見。
下面例子用ActionScript 創建一個Button 控件,並將其加入到容器之中:
//創建一個Box 容器。
var boxContainer:Box = new Box();
//設置Box 容器

//創建Button 控件。
var b:Button = new Button()
// 設置button 控件。
b.label = "Submit";
...
// 將Button 添加到 Box 容器中。
boxContainer.addChild(b);
下面的步驟顯示了用代碼創建一個Button 控件,並將這個控件添加到Box 容器中時所發生的一切:
1. 調用了組件的構造函數,如下面代碼所示:
// Create a Button control.
var b:Button = new Button()
2. 通過設置組件的屬性對組件進行了設置,如下面代碼所示:
// Configure the button control.
b.label = "Submit";
組件的setter 方法將會調用invalidateProperties(), invalidateSize(), 或者
invalidateDisplayList() 方法.
3. 調用addChild()方法將該組件添加到父組件中,如下代碼所示:
// Add the Button control to the Box container.
boxContainer.addChild(b);
Flex 執行以下動作:
4. 將component 的parent 屬性設置爲對父容器的引用.
5. 計算組件的樣式(style) 設置.
6. 在組件上分發preinitialize 事件.
7. 調用組件的createChildren() 方法.
8. 調用invalidateProperties(), invalidateSize()和invalidateDisplayList()方法以觸發後續到來的,下一
個“渲染事件”(render event)期間對commitProperties(), measure(),或 updateDisplayList()方
法的調用。
這個規則唯一一個例外就是當用戶設置組件的height 和width 屬性時, Flex 不會調用
measure() 方法.
9. 在組件上分發initialize 事件。此時,組件所有的子組件都被初始化,但是組件沒有改更
size 和處理佈局。可以利用這個事件在組件佈局之前執行一些附加的處理。
10. 在父容器上分發childAdd 事件.
11. 在父容器上分發initialize 事件.
12. 在下一個“渲染事件”(render event)中, Flex 執行以下動作:
a. 調用組件的commitProperties()方法.
b. 調用組件的 measure()方法.
c. 調用組件的 layoutChrome()方法.
d. 調用組件的updateDisplayList()方法.
e. 在組件上分發updateComplete 事件.
13. 如果commitProperties(), measure()或者updateDisplayList()方法調用了invalidateProperties(),
invalidateSize(),或invalidateDisplayList()方法,則Flexh 會分發另外一個render 事件.
14. 在最後的render 事件發生後, Flex 執行以下動作:
a. 通過設置組件的visible 屬性使組件變爲可視.
b. 在組件上分發creationComplete 事件.組件的大小(size)和佈局被確定.
這個事件只在組件創建時分發一次.
c. 在組件上分發updateComplete 事件.無論什麼時候,只要組件的佈局
(layout),位置,大小或其它可視的屬性發生變化就會分發這事件,然後組件被
更新,以使組件能夠被正確地顯示.
當使用addChild()方法將組件添加到容器中時,大部分工作都是爲了設置這個組件.這是
因爲直到把組件添加到容器中時,Flex 才能確定它的大小(size),設置它所繼承樣式(style)屬
性,或者在屏幕上畫出它.
也可以用MXML,在應用中完成上面的組件添加動作,如下面的例子所示:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Box>
<mx:Button label="Submit"/>
</mx:Box>
</mx:Application>
在MXML 中創建組件時,Flex 執行的步驟順序同用ActionScript 的步驟順序相同.
使用removeChild() 方法可將組件從容器中移出,如果對這個組件再沒有其他的引用,那就
相當於使用Adobe® Flash® Player 或Adobe® AIR™的垃圾回收機制將組件從內存中刪除.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章