回去研究一下rawChild
回去研究一下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的内部对象和子组件