在Flex1.5中,如果我們要實時創建一個組件實例的話,可以使用createChild()方法。
例如,假定以下代碼在MyApp.mxml中:
<mx:Script>
import mx.controls.Button;
var stopButton:Button;
function someEventHandler():Void
{
stopButton = Button(form1.createChild(Button, undefined, { label: "Stop!" }));
}
</mx:Script>
以上唯一的方法同時完成下面四件事情:
創建特定類(Button)的一個實例(stopButton)。
使用“initObj({ label: "Stop!" })”設置該新實例的屬性(label)。
將新創建的實例附加到一個父容器(form1)中。
為了與其他兄弟實例區分開,將該實例的_name屬性設置為唯一類似__Button17的字符串值。
實際上,在內部,createChild()調用的是MovieClip類的attachMovie()方法來完成實例的創建。
而在Flex2中,類似createChild()這樣的方法將不再必須也不是恰當的方法,因為在Flash Player 8.5中,可以像創建其他對象一樣使用new操作來創建可視對象,并且,當一個可視對象實例創建后,其是沒有父組件的,我們可以將其添加到父容器中,也可以在隨后將其移除并添加到其他的父容器中(是的,Flash終于支持re-parenting),或者,我們可以將其移除以讓其被垃圾回收器回收。
新的動態實時創建實例的方法如下:
import mx.controls.Button;
var stopButton:Button;
function someEventHandler():Void
{
stopButton = new Button();
stopButton.label = "Stop!";
stopButton.setStyle("color", 0xFF0000);
form1.addChild(stopButton);
}
以上使用了更多行的代碼,但是他更加的清晰而易于理解:
使用new操作符創建一個新的實例。
使用普通的賦值語句和setStyle()方法設置該新實例的屬性和樣式。
顯式調用addChild()方法將該新的實例添加到父組件中。
注意:其他的API,如:destroyChild()、destroyChildAt()及destroyAllChildren()方法以及被移除,替代他們的是:removeChild()、 removeChildAt()和removeAllChildren()方法。
最后,請記住以下Flex2中組件創建的周期:
創建(new) - add添加(add) - 移除(remove) - ( 添加 - 移除 - ... ) - 被垃圾收集
原文地址:
Creating Component Instances at Runtime另外,今天才知道,原來Flash Player 8.5的開發代號叫:Zaphod
PS:Firefox的查看選中部分源代碼的功能真是方便,IE有的學哦...:)