3.11.使用容器初始化

3.11.1 问题
为了提高应用的响应能力,我们需要保证容器的所有子组件在应用初始化的时候即被创建。
3.11.2 解决办法
使用容器的类的creationPolicy 属性来决定什么时候创建组件。
3.11.3 讨论
所有容器,事实上所有UIComponent 组件都使用一种三步走的过程来创建本身,即创建成员属性、创建子组件和设置自己的布局。所有容器的第一步都是由框架调用它的构造方法并且广播一个预初始化事件。第二步,假设容器与其所有的子孙的关系构成一棵树形结构,那么,预初始化的工作是由上而下的,也就是说,组件优先预初始化父亲容器,按照深度顺序首先预初始化根节点位置上的容器,直到叶子节点的子组件预初始化完毕。第三步,类似于于初始化的过程,真正初始化完成的顺序却是和预初始化结束的顺序相反,如此,先出初始化完毕叶子节点位置的子组件,然后此过程往上行节点重复,当某个节点位置的子组件初始化完毕时即广播一个creationComplete 事件,同理,随后上一级子组件也会广播一次这个事件,以此类推,所有的上行的父亲容器直到根节点位置上的容器都会在自身初始化完毕的时候广播该事件。下面的代码简单地展示初始化的顺序:
+展开
-XML
<mx:HBox>
<mx:VBox>
<mx:Panel/>
<mx:Panel/>
</mx:VBox>
</mx:HBox>

初始化将按照下面的顺序:
HBox preinitialize
VBox preinitialize
FirstPanel preinitialize
SecondPanel preinitialize
FirstPanel initialize
SecondPanel initialize
VBox initialize
HBox initialize
FirstPanel creationComplete
SecondPanel creationComplete
VBox creationComplete
HBox creationComplete
当组件广播preinitialize 和initialize 事件时,它的子组件还没有创建完成。因此,要访问某个组件的所有子组件,必须侦听creationComplete 时间。在广播initialize 事件后,组件本身已经完成测量、绘制和布局,但是其子组件可能仍未完全完成实例化过程。最后,creationComplete 事件表明所有容器内的子组件都完全实例化结束。

加支付宝好友偷能量挖...


评论(0)网络
阅读(101)喜欢(0)flash/flex/fcs/AIR