在FLEX中,我们经常会用到,当容器或者这个组件初始化的时候,或者创建完成的时候,就去做一些事情。
那么此时Flex就会派发preinitialize、initialize和creationComplete事件。当子项初始化完成后,其父容器开始初始化。即子项总是先于父容器初始化完成。然而,只有当所有子项的父容器都初始化完成后,子项才开始派发creationComplete事件。
Flex的Preinitialize(预初始化)、Initialize(初始化)、CreationComplete创建完成事件
代码如下:
- <?xml version="1.0" encoding="utf-8"?>
- <s:Panel xmlns:fx="http://ns.adobe.com/mxml/2009"
- xmlns:s="library://ns.adobe.com/flex/spark"
- xmlns:mx="library://ns.adobe.com/flex/mx"
- width="100%" height="100%"
- <span style="color:#ff0000;">initialize="panel1_initializeHandler(event)"</span>
- <span style="color:#ff0000;">creationComplete="panel1_creationCompleteHandler(event)"</span>
- title="{ModelLocator.getInstance().baseDatApplyTitle}"
- <span style="color:#cc0000;">preinitialize="panel1_preinitializeHandler(event)"</span>
- xmlns:utils="com.tiamaes.utils.*"
- minHeight="500"
- minWidth="700"
- <span style="color:#ff0000;">updateComplete="panel1_updateCompleteHandler(event)"</span>
- >
- //initialize <span style="color:#ff0000;">执行顺序 2</span>
- protected function panel1_initializeHandler(event:FlexEvent):void
- {
- // TODO Auto-generated method stub 1 查询出来这个值
- cityNameString=UserSession.getCurrentAccount().cityName;
- yearStr=applyYear.text;
- cityCode = UserSession.getCurrentAccount().cityCode;
- token = dataApplyProxy.querySavedDataBaseList("2013-6-30 10:15:58",cityCode);
- FlexUtil.addResponder(token,baseDataResult,baseDataFault);
- }
- //creationComplete <span style="color:#ff0000;">执行顺序 3</span>
- protected function panel1_creationCompleteHandler(event:FlexEvent):void
- {
- // TODO Auto-generated method stub
- trace(tempValueArr);
- trace(tempValueArr);
- }
- //preinitialize <span style="color:#ff0000;"> 执行顺序 1 </span>
- protected function panel1_preinitializeHandler(event:FlexEvent):void
- {
- // TODO Auto-generated method stub
- trace(tempValueArr);
- trace(tempValueArr);
- }
- //updateComplete <span style="color:#cc0000;">执行顺序 4</span>
- protected function panel1_updateCompleteHandler(event:FlexEvent):void
- {
- // TODO Auto-generated method stub
- trace(tempValueArr);
- trace(tempValueArr);
- }
如果2个组件相互嵌套,那行执行顺序就是:preinitialize先外后内,initialize和creationComplete,updateComplete先内后外。
如果2个组件是相互平行的关系,那行执行顺序就是:前面组件initialize结束后,后面的组件才会抛出preinitialize
<结束!>
Flex程序执行的过程中会触发preinitialize, initialize和creationComplete事件,还会创建静态成员变量和成员变量。它们的执行顺序时怎样的?Flex程序的执行顺序如下。
- 创建静态成员变量
- 创建成员变量
- 触发preinitialize事件
- 执行初始化
- 触发initialize事件
- 执行创建过程
- 触发creationComplete事件
如果 Flex 使用了组件,那么主程序和组件的 preinitialize, initialize 和 creationComplete 事件的先后顺序又是怎样的?
例如
一个程序有下面的结构
Applicaion
static member
member
TestBox1
TestBox2
那么此程序的执行过程如下。
create static member
create member
application preinitialize
TestBox1 preinitialize
TestBox1 initialize
TestBox2 preinitialize
TestBox2 initialize
application initialize
TestBox1 creationComplete
TestBox2 creationComplete
applicationcreationComplete
事实上, Flex 中 一个组件的initialize 过程包括它的子组件的 preinitialize 和 initialize 两个过程。flex的一个组件创建过程包括它的子组件的 创建过程 。
Tips:
如果你要在子组件的 initialize 响应函数中使用 Application 的某个变量,你必须在 application 的
Preinitialize 响应函数中创建它或者直接在该变量定义时创建。