技術(shù)分享 Flex 初始化時事件如何測試
本文和大家重點討論一下Flex 初始化時的事件測試,F(xiàn)lex組件在建立的時候都會經(jīng)歷四個事件:preinitialize, initialize, creationComplete和updateComplete(updateComplete事件在任何改動視覺的情況下都會發(fā)生,不是初始化時獨有的)。
Flex 初始化時的事件測試
Flex組件在建立的時候都會經(jīng)歷四個事件:preinitialize, initialize, creationComplete和updateComplete(updateComplete事件在任何改動視覺的情況下都會發(fā)生,不是初始化時獨有的)。我這里有個例子來檢測在嵌套和平行的情況下,F(xiàn)lex 初始化時測試各個組件的事件拋出順序。
- 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>
 - import flash.utils.getTimer;
 - private function showEvent(event:Event):void
 - {
 - trace(flash.utils.getTimer().toString()+" >> "
 - +event.currentTarget.name+" "+event.type);
 - }
 - ]]>
 - < span>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)"/>
 - < span>mx:Canvas>
 - <mx:Button id="btn2"
 - preinitialize="showEvent(event)"
 - initialize="showEvent(event)"
 - creationComplete="showEvent(event)"
 - updateComplete="showEvent(event)"/>
 - < span>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
 
看著有點混亂,不過仔細(xì)看看,可以把過程分成兩個部分。很明顯,所有的creationComplete和updateComplete發(fā)生在第二次update的時候,之前Flex組件只是做一些設(shè)置和計算的工作,并沒有在畫布上畫任何東西。除此以外,還有這么一些規(guī)律:
◆就單個組件而言,F(xiàn)lex 初始化時事件的拋出順序是preinitialize,initialize,creationComplete
◆嵌套關(guān)系的兩個組件(比如Canvas和button1),preinitialize先外后內(nèi),initialize和creationComplete先內(nèi)后外。只是creationComplete要在下一次update才會發(fā)生。 
◆平行關(guān)系的兩個組件(比如Canvas和button2),按mxml內(nèi)的順序,只有前面組件initialize結(jié)束后,后面的組件才會拋出preinitialize。
【編輯推薦】















 
 
 
 
 
 
 