Flex 组件初始化顺序

在FLEX中,我们经常会用到,当容器或者这个组件初始化的时候,或者创建完成的时候,就去做一些事情。

那么此时Flex就会派发preinitialize、initialize和creationComplete事件。当子项初始化完成后,其父容器开始初始化。即子项总是先于父容器初始化完成。然而,只有当所有子项的父容器都初始化完成后,子项才开始派发creationComplete事件。

Flex的Preinitialize(预初始化)、Initialize(初始化)、CreationComplete创建完成事件

代码如下:

[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <s:Panel xmlns:fx="http://ns.adobe.com/mxml/2009"   
  3.          xmlns:s="library://ns.adobe.com/flex/spark"   
  4.          xmlns:mx="library://ns.adobe.com/flex/mx"   
  5.          width="100%" height="100%"  
  6.          <span style="color:#ff0000;">initialize="panel1_initializeHandler(event)"</span>  
  7.          <span style="color:#ff0000;">creationComplete="panel1_creationCompleteHandler(event)"</span>  
  8.          title="{ModelLocator.getInstance().baseDatApplyTitle}"   
  9.          <span style="color:#cc0000;">preinitialize="panel1_preinitializeHandler(event)"</span>  
  10.          xmlns:utils="com.tiamaes.utils.*"  
  11.          minHeight="500"  
  12.          minWidth="700"  
  13.          <span style="color:#ff0000;">updateComplete="panel1_updateCompleteHandler(event)"</span>  
  14.          >  
[html]  view plain copy
  1.          //initialize <span style="color:#ff0000;">执行顺序 2</span>  
  2. protected function panel1_initializeHandler(event:FlexEvent):void  
  3. {  
  4.     // TODO Auto-generated method stub   1 查询出来这个值  
  5.     cityNameString=UserSession.getCurrentAccount().cityName;  
  6.     yearStr=applyYear.text;  
  7.     cityCode = UserSession.getCurrentAccount().cityCode;  
  8.     token = dataApplyProxy.querySavedDataBaseList("2013-6-30 10:15:58",cityCode);  
  9.     FlexUtil.addResponder(token,baseDataResult,baseDataFault);  
  10.       
  11. }  
  12.   
  13.                //creationComplete  <span style="color:#ff0000;">执行顺序 3</span>  
  14. protected function panel1_creationCompleteHandler(event:FlexEvent):void  
  15. {  
  16.     // TODO Auto-generated method stub  
  17.     trace(tempValueArr);  
  18.     trace(tempValueArr);  
  19. }  
  20.   
  21.                //preinitialize <span style="color:#ff0000;"> 执行顺序 1 </span>  
  22. protected function panel1_preinitializeHandler(event:FlexEvent):void  
  23. {  
  24.     // TODO Auto-generated method stub  
  25.     trace(tempValueArr);  
  26.     trace(tempValueArr);  
  27. }  
  28.   
  29.                //updateComplete  <span style="color:#cc0000;">执行顺序 4</span>  
  30. protected function panel1_updateCompleteHandler(event:FlexEvent):void  
  31. {  
  32.     // TODO Auto-generated method stub  
  33.     trace(tempValueArr);  
  34.     trace(tempValueArr);  
  35. }  
对于单个组件来说,事件的执行顺序就是:preinitialize,initialize,creationComplete,updateComplete

如果2个组件相互嵌套,那行执行顺序就是:preinitialize先外后内,initialize和creationComplete,updateComplete先内后外。

如果2个组件是相互平行的关系,那行执行顺序就是:前面组件initialize结束后,后面的组件才会抛出preinitialize

<结束!>




Flex程序执行的过程中会触发preinitialize, initializecreationComplete事件,还会创建静态成员变量和成员变量。它们的执行顺序时怎样的?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 响应函数中创建它或者直接在该变量定义时创建。  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值