首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > flex >

关于flex组装加载的总结

2012-09-14 
关于flex组建加载的总结组件的初始化顺序:preinitialize 在所有的初始化之前触发,没有子组件的定义,但是可

关于flex组建加载的总结

组件的初始化顺序:

preinitialize
在所有的初始化之前触发,没有子组件的定义,但是可以引用组件的变量.

initialize
当所有子组件生成完成后触发,在这个时间点还没有组件被渲染出来.

creationComplete
组件定义完成并已经在显示列表.

applicationComplete
所有的组件初始化完成并显示;只适用于Application组件。

先考虑四个关键字,在考虑组件的内外层关系。
preinitialize按组件从外向内执行。
initialize、creationComplete按组件从内向外执行。
某组件的preinitialize事件发生后其id才能被其他的组件使用(即id的构造从外向里)。
某组件的initialize事件发生后才给此组件的其他属性赋值。

看下面的例子:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
????? xmlns:s="library://ns.adobe.com/flex/spark"
????? xmlns:mx="library://ns.adobe.com/flex/halo"
????? minWidth="1024" minHeight="768"
????? preinitialize="a1();" initialize="b1();"

creationComplete="c1();" applicationComplete="d1();">

<fx:Script>
?? <![CDATA[
??
??? private var i:int = 0;
???? private function a1():void{
??????? trace("a1");
???? }
???? private function a2():void{
????? trace("a2");
????? trace("+++" + labelID + "+++");
???? }
???? private function a3():void{
????? trace("a3");
????? trace("***" + labelID + "***");
???? }
???? private function b3():void{
????? trace("b3");
???? }
???? private function b2():void{
????? trace("b2");
???? }
???? private function b1():void{
????? trace("b1");
???? }
???? private function c3():void{
????? trace("c3");
???? }
???? private function c2():void{
????? trace("c2");
???? }
???? private function c1():void{
????? trace("c1");
???? }
?????? private function d1():void{
??????? trace("d1");
???? }
?????? public function text3():String{
????? trace("==="+labelID+"===");
????? i++;
????? trace("呵呵呵" + i);
??????? return "哈哈" + i;
???? }
??
?? ]]>
</fx:Script>

<mx:Panel preinitialize="a2();" initialize="b2();" creationComplete="c2

();" >
??? <mx:Label id="labelID" text="{text3()}" preinitialize="a3

();" initialize="b3();" creationComplete="c3();"/>
</mx:Panel>

</s:Application>

输出结果为:
===null===
呵呵呵1
a1
a2
+++null+++
a3
***ss.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.Panel5.labelID***
b3
===ss.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.Panel5.labelID===
呵呵呵2
b2
b1
c3
c2
c1
d1


为了便于理解Flex里面组件的事件是如何发生的,我写了这么一些代码:
mxml:
<mx:Something ......
??????? addedToStage="trace('addedToStage')"
??????? creationComplete="trace('creationComplete')"
??????? enterFrame="if (!enterframeflag) {trace('enterFrame'); enterframeflag=true;}"
??????? initialize="trace('initialize')"
??????? preinitialize="trace('preinitialize')"
??????? resize="trace('resize')"
??????? show="trace('show')"
/>
然后再debug模式下运行,输出结果如下:
preinitialize
initialize
enterFrame
resize
[SWF] C:\Documents and Settings\polo\Desktop\study\testmenu\bin-debug\testmenu.swf - 877,825 bytes after decompression
creationComplete
addedToStage
再运行一次:
preinitialize
initialize
[SWF] C:\Documents and Settings\polo\Desktop\study\testmenu\bin-debug\testmenu.swf - 877,825 bytes after decompression
enterFrame
resize
creationComplete
addedToStage
[SWF]一行是解压过程,可以忽略不计。
剩下的内容就是组件事件的发生顺序了。
预初始化->初始化->进入桢->改变大小->创建结束->添加到场景。
而show事件没有发生。

?

热点排行