flex创建组件时初始化事件

flex组件在建立的时候都会经历四个事件:preinitialize, initialize, creationComplete和updateComplete(updateComplete事件在任何改动视觉的情况下都会发生,不是初始化时独有的)。我这里有个例子来检测在嵌套和平行的情况下,测试各个组件的事件抛出顺序。


<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
preinitialize="showEvent(event)"
initialize="showEvent(event)"
creationComplete="showEvent(event)"
updateComplete="showEvent(event)">

<mx:Script>
<![CDATA[
import flash.utils.getTimer;
private function showEvent(event:Event):void
{
trace(flash.utils.getTimer().toString()+" >> "+event.currentTarget.name+" "+event.type);
}
]]>
</mx:Script>

<mx:Canvas id="canv1"
preinitialize="showEvent(event)"
initialize="showEvent(event)"
creationComplete="showEvent(event)"
updateComplete="showEvent(event)">

<mx:Button id="btn1"
preinitialize="showEvent(event)"
initialize="showEvent(event)"
creationComplete="showEvent(event)"
updateComplete="showEvent(event)"/>
</mx:Canvas>

<mx:Button id="btn2"
preinitialize="showEvent(event)"
initialize="showEvent(event)"
creationComplete="showEvent(event)"
updateComplete="showEvent(event)"/>

</mx:Application>

它的输出是:

1299 >> eventTest0 preinitialize

1307 >> canv1 preinitialize

1310 >> btn1 preinitialize

1318 >> btn1 initialize

1319 >> canv1 initialize

1320 >> btn2 preinitialize

1321 >> btn2 initialize

1321 >> eventTest0 initialize

[SWF] G:\projects\eventTest\bin-debug\eventTest.swf - 588,818 bytes after decompression

1387 >> btn1 creationComplete

1387 >> btn1 updateComplete

1387 >> canv1 creationComplete

1387 >> canv1 updateComplete

1388 >> btn2 creationComplete

1388 >> btn2 updateComplete

1388 >> eventTest0 creationComplete

1390 >> eventTest0 updateComplete

看着有点混乱,不过仔细看看,可以把过程分成两个部分。很明显,所有的creationComplete和updateComplete发生在第二次update的时候,之前flex组件只是做一些设置和计算的工作,并没有在画布上画任何东西。除此以外,还有这么一些规律:

就单个组件而言,事件的抛出顺序是preinitialize,initialize,creationComplete

嵌套关系的两个组件(比如Canvas和button1),preinitialize先外后内,initialize和creationComplete先内后外。只是creationComplete要在下一次update才会发生。
平行关系的两个组件(比如Canvas和button2),按mxml内的顺序,只有前面组件initialize结束后,后面的组件才会抛出preinitialize。


引用别人的文章!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值