Flex的事件驱动问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yethyeth/article/details/4234265

文章,http://www.onflex.org/ted/2007/02/flex-instantiation-life-cycle-and-event.php ,说,Flex一切都是事件,flex是事件驱动的。(Flex is an event driven programming model, everything (and I mean everything) happens due to an event. )。


这个问题的起源是我写了一个读取VBox高度的代码:



// init the whole app.
         private function init():void
         {
             leftTree.dataProvider=leftList;   
             leftTree.selectedIndex=0;
            
             //srightVBox.backgroundImage="http://www.lovezaoan.cn/attachment/200905/24/25_1243179290Yp2p.jpg";    
            
             test.text = leftCanvas.width+ " "+hdBox.height;
         }

上面的粗体是读leftCavas和hdBox的大小,但是得到的是0.


根据上面的文章,得到的0的原因是没有理解flex中的组件加载顺序。根据上面文章提供的例子。

http://www.onflex.org/flexapps/applications/EventFlow/srcview/index.html


结果:

http://www.onflex.org/flexapps/applications/EventFlow/


167ms >> EventFlow0.preinitialize
183ms >> EventFlow0.outTextArea.initialize
187ms >> EventFlow0.HelloButton.initialize
188ms >> EventFlow0.GoodByeButton.initialize
189ms >> EventFlow0.ClearButton.initialize
189ms >> EventFlow0.initialize
243ms >> EventFlow0.outTextArea.creationComplete
243ms >> EventFlow0.HelloButton.creationComplete
243ms >> EventFlow0.GoodByeButton.creationComplete
244ms >> EventFlow0.ClearButton.creationComplete
244ms >> EventFlow0.creationComplete
246ms >> EventFlow0.applicationComplete


从这个结果看出,组件的初始化过程是:

applicaiton先preinitialize,然后是各个组件依次initialize,然后是application的initialize,然后是各个组件依次creationComplete,然后是application的creationComplete,最后是applicatonComplete。


所以,我最初的代码里面把application的initialize理解成了html中body的onload了,所以在这个时候做一些对其他组件的初始化操作,包括获取leftCanvas和hdBox的大小的时候就不对了。以leftCanvas为例,这个时候它没有初始化完毕,所以其大小为0是正常的。

所以,代码要修改为:

creationComplete="init()"


即,不用applicaiton的initialize事件,而是creationComplete事件,因为这个时候,application下的组件都已经创建完毕了。这个时候它们有height和width的值了。


关于flex的事件还可以参考:http://livedocs.adobe.com/flex/2/docs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000492.html

刚看到: About startup order(http://livedocs.adobe.com/flex/3/html/help.html?content=layoutperformance_03.html),有意义,改天研究。

猜你喜欢

转载自blog.csdn.net/yethyeth/article/details/4234265
今日推荐