回去研究一下rawChild
FlexSprite還不能直接addChild
要用rawChild
rawChildren是容器特有的,看看API就可以大概理解rawChildren的作用了。
uiComponet屬於組件,非容器,因此是沒有rawChildren方法的
mx.core.Container是“組件(UIComponent)容器”,用來管理其中子組件(UIComponent)的布局。
通過Container的numChildren屬性和getChildAt()方法就可以遍曆其所包含子群組件,也可以通過getChildren()方法一次性獲得所有子組件的數組。通過addChild()、addChildAt()、removeChild()、removeChildAt()、removeAllChildren()等方法來維護容器所包含子群組件。我們最常用的Application就是組件容器,組件同組件容器的關係非常密切,Flex中的組件無法脫離容器而獨立顯示,Flex組件必須放在某個容器中才能工作。因此,Flex組件的生命週期和布局都與組件容器息息相關,這一點在2.5.2節中會有詳細闡述。
mx.core.Container是組件(UIComponent)容器的同時也是一個“顯示對象容器(DisplayObjectContainer)”。值得注意的是:作為組件(UIComponent)容器,Container覆蓋了繼承自DisplayObjectContainer的addChild()、addChildAt()、removeChild()、removeChildAt()等方法,這些方法在Container類中只是用來維護組件容器所包含子群組件,這不同於維護子顯示對象。同時,Container的numChildren屬性也只是用來表示容器中所有子組件的數量而不是所有子顯示對象的數量。
Container自身也是一個組件,它也有自己的內部對象,比如邊框、背景、捲軸、標題、註腳等,這些內部對象被稱為組件容器的“邊飾”。從顯示對象容器角度來看,Container的內部對象以及子組件都是顯示對象容器的子顯示對象。因此,容器的所有子顯示對象應包括其內部對象以及所有的子組件(child UIComonent),通過Container的rawChildren屬性可以獲得訪問容器所有子顯示對象的介面。代碼清單2-18列出了Application對象的所有子顯示對象,並標記了每個子顯示對象是子組件還是內部對象,如下所示。
代碼清單2-18列出Application的內部對象和子組件