上一节介绍了Flex的生命周期本节我们将介绍第一个时期:出生时期
为了更一步了解我们结合例子说明
1.出生时期
组件出生阶段包含三个步骤:构造, 配置,装配和初始化。他们分别对应了4个Protected方法(constructor, createChildren, commitProperties,measure和updatedisplayList)下面具体详细讲解下每个步骤
1.1 构造函数:首先组件是从构造函数出生的。当你使用new操作符或者在mxml(如代码清单1)里面声明一个组件时。构造函数就被调用了。通过调用构造函数,一个组件在内存中被产生了。但是仅此而已。因为他属于生命周期的最早部分,此时组件中的子元素还没有被产生,属性也不明确。所以通常我们在这里做的事情很少。他是他也是一个为组件添加监听器的好地方,因为一个组件的构造函数只会被调用一次。
代码清单 1
var button:Button = new Button();
1.2 配置阶段(set 和 get方法调用)
出生阶段的第二个步骤是装配阶段,在这个阶段组件定义的一些属性会通过set方法被赋值。但是此时组件的子元素仍然没有被创建,如果此时涉及到子元素的属性值情特别注意如下面代码(代码清单2所示)
代码清单2
<s:Panel width="200">
<s:Button width="200"/>
</s:Panel>
执行顺序如下
Panel:constructor
Panel.width: set
Button:constructor
Button.width: set
所以建议大家在配置阶段只设置特定属性值。而不要去做一些业务逻辑。
1.3 装配阶段 addElement(Flex4以下中addChild)
组件被构造以及赋值以后并不会自动进入生命周期的循环过程。他必须经过装配时期及组件自身装配到显示列表上DisplayList。组件只有通过 addElement或者 addElementAt方法被转配到 Display List 上,才会依次进入到以下的生命周期时期,否则得话,以后的步骤和方法都不会被调用。(特别注意)这个时候组件之间没有建立任何父子关系只是每个组件自身被添加到显示列表上。
1.4 初始化阶段(initialization)
初始化阶段发生在组件装配阶段之后这个阶段包含了三个子阶段,会派发三个事件。
1.4.1 组件派发Preinitialize事件 这个阶段意味着组件已经被添加到显示列表位置了。
1.4.2 调用protected方法createChildren()方法来生成子元素,在这个阶段你可以覆盖此方法添加自定义的子元素。
1.4.3派发initilizate事件这意味着组件以及所有子元素都被创建并配置装配到DisplayList上了。
然后进入第一次验证和提交阶段Flex框架会通过layoutManager引擎来依次调用组件的三个校验方法invalidateProperties(),invalidateSize(),invalidateDisplayList,以及分别对应的三个提交方法commitProperties(),measure(),commitDisplayList(),这几个方法的作用会在下面介绍。
最后派发createComplement()事件。
至此,组件的初始化阶段完成,同时也意味着 Flex 组件的出生时期结束了。总结以上个步骤,我们用图 4 来标注组件出生时期的流程图