◀ [AS3]忘れちゃいかんぜよ 4/20 [Flex]LabelコンポーネントでuseHandCursor ▶

[Flex]初期化系イベントめも

Applicationコンポーネントで初期処理を行う場合のイベントハンドラについてメモ。普通にcreationCompleteを使ってたわけですが、よく見ると初期化系っぽいイベントが何個かあるわけです。

  • applicationComplete
  • creationComplete
  • initialize
  • preinitialize

気になったので確認してみる。

テストコードその1

とりあえずイベント全部載せなApplicationコンポーネントのみっていうソース。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
activate="traceEvent(event)"
add="traceEvent(event)"
added="traceEvent(event)"
addedToStage="traceEvent(event)"
applicationComplete="traceEvent(event)"
childAdd="traceEvent(event)"
childIndexChange="traceEvent(event)"
childRemove="traceEvent(event)"
click="traceEvent(event)"
creationComplete="traceEvent(event)"
currentStateChange="traceEvent(event)"
currentStateChanging="traceEvent(event)"
dataChange="traceEvent(event)"
deactivate="traceEvent(event)"
doubleClick="traceEvent(event)"
dragComplete="traceEvent(event)"
dragDrop="traceEvent(event)"
dragEnter="traceEvent(event)"
dragExit="traceEvent(event)"
dragOver="traceEvent(event)"
dragStart="traceEvent(event)"
effectEnd="traceEvent(event)"
effectStart="traceEvent(event)"
enterFrame="traceEvent(event)"
enterState="traceEvent(event)"
error="traceEvent(event)"
exitState="traceEvent(event)"
focusIn="traceEvent(event)"
focusOut="traceEvent(event)"
hide="traceEvent(event)"
initialize="traceEvent(event)"
invalid="traceEvent(event)"
keyDown="traceEvent(event)"
keyFocusChange="traceEvent(event)"
keyUp="traceEvent(event)"
mouseDown="traceEvent(event)"
mouseDownOutside="traceEvent(event)"
mouseFocusChange="traceEvent(event)"
mouseMove="traceEvent(event)"
mouseOut="traceEvent(event)"
mouseOver="traceEvent(event)"
mouseUp="traceEvent(event)"
mouseWheel="traceEvent(event)"
mouseWheelOutside="traceEvent(event)"
move="traceEvent(event)"
preinitialize="traceEvent(event)"
remove="traceEvent(event)"
removedFromStage="traceEvent(event)"
render="traceEvent(event)"
resize="traceEvent(event)"
rollOut="traceEvent(event)"
rollOver="traceEvent(event)"
scroll="traceEvent(event)"
show="traceEvent(event)"
tabChildrenChange="traceEvent(event)"
tabEnabledChange="traceEvent(event)"
tabIndexChange="traceEvent(event)"
toolTipCreate="traceEvent(event)"
toolTipEnd="traceEvent(event)"
toolTipHide="traceEvent(event)"
toolTipShow="traceEvent(event)"
toolTipShown="traceEvent(event)"
toolTipStart="traceEvent(event)"
updateComplete="traceEvent(event)"
valid="traceEvent(event)"
valueCommit="traceEvent(event)"
>

<mx:Script>
<![CDATA[
private function traceEvent(event:Event):void
{
trace(new Date().getTime()+":"+event.type);
}
]]>
</mx:Script>

</mx:Application>

traceの出力結果は以下な感じ。

1208916907203:resize
1208916907219:added
1208916907219:add
1208916907250:preinitialize
1208916907250:initialize
1208916907281:enterFrame
1208916907328:enterFrame
1208916907328:added
1208916907344:added
1208916907344:creationComplete
1208916907359:added
1208916907359:addedToStage
1208916907359:applicationComplete
1208916907359:updateComplete
1208916907469:enterFrame
1208916908578:enterFrame
1208916909656:enterFrame
:
: (enterFrameが続く...)
:

おぅ!creationCompleteがaddedToStageより前に発生してる。stageにアクセスできねーじゃん。applicationCompleteを初期処理のイベントハンドラとするのが正しいようですね。

テストコードその2

子コンポーネントがある時のイベント発生順も気になったので書いてみた。こちらはFlexなイベントのみにしてみた。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
add="traceEvent(event)"
applicationComplete="traceEvent(event)"
childAdd="traceEvent(event)"
childIndexChange="traceEvent(event)"
childRemove="traceEvent(event)"
creationComplete="traceEvent(event)"
currentStateChange="traceEvent(event)"
currentStateChanging="traceEvent(event)"
dataChange="traceEvent(event)"
dragComplete="traceEvent(event)"
dragDrop="traceEvent(event)"
dragEnter="traceEvent(event)"
dragExit="traceEvent(event)"
dragOver="traceEvent(event)"
dragStart="traceEvent(event)"
effectEnd="traceEvent(event)"
effectStart="traceEvent(event)"
enterState="traceEvent(event)"
error="traceEvent(event)"
exitState="traceEvent(event)"
hide="traceEvent(event)"
initialize="traceEvent(event)"
invalid="traceEvent(event)"
mouseDownOutside="traceEvent(event)"
mouseWheelOutside="traceEvent(event)"
move="traceEvent(event)"
preinitialize="traceEvent(event)"
remove="traceEvent(event)"
resize="traceEvent(event)"
scroll="traceEvent(event)"
show="traceEvent(event)"
toolTipCreate="traceEvent(event)"
toolTipEnd="traceEvent(event)"
toolTipHide="traceEvent(event)"
toolTipShow="traceEvent(event)"
toolTipShown="traceEvent(event)"
toolTipStart="traceEvent(event)"
updateComplete="traceEvent(event)"
valid="traceEvent(event)"
valueCommit="traceEvent(event)"
>

<mx:Script>
<![CDATA[
private function traceEvent(event:Event):void
{
if(event.currentTarget==p2){
trace("\t\t"+new Date().getTime()+":"+event.type);
}else if(event.currentTarget==p){
trace("\t"+new Date().getTime()+":"+event.type);
}else{
trace(new Date().getTime()+":"+event.type);
}
}
]]>
</mx:Script>

<mx:Panel id="p"
add="traceEvent(event)"
childAdd="traceEvent(event)"
childIndexChange="traceEvent(event)"
childRemove="traceEvent(event)"
creationComplete="traceEvent(event)"
currentStateChange="traceEvent(event)"
currentStateChanging="traceEvent(event)"
dataChange="traceEvent(event)"
dragComplete="traceEvent(event)"
dragDrop="traceEvent(event)"
dragEnter="traceEvent(event)"
dragExit="traceEvent(event)"
dragOver="traceEvent(event)"
dragStart="traceEvent(event)"
effectEnd="traceEvent(event)"
effectStart="traceEvent(event)"
enterState="traceEvent(event)"
exitState="traceEvent(event)"
hide="traceEvent(event)"
initialize="traceEvent(event)"
invalid="traceEvent(event)"
mouseDownOutside="traceEvent(event)"
mouseWheelOutside="traceEvent(event)"
move="traceEvent(event)"
preinitialize="traceEvent(event)"
remove="traceEvent(event)"
resize="traceEvent(event)"
scroll="traceEvent(event)"
show="traceEvent(event)"
toolTipCreate="traceEvent(event)"
toolTipEnd="traceEvent(event)"
toolTipHide="traceEvent(event)"
toolTipShow="traceEvent(event)"
toolTipShown="traceEvent(event)"
toolTipStart="traceEvent(event)"
updateComplete="traceEvent(event)"
valid="traceEvent(event)"
valueCommit="traceEvent(event)"
>
<mx:Panel id="p2"
add="traceEvent(event)"
childAdd="traceEvent(event)"
childIndexChange="traceEvent(event)"
childRemove="traceEvent(event)"
creationComplete="traceEvent(event)"
currentStateChange="traceEvent(event)"
currentStateChanging="traceEvent(event)"
dataChange="traceEvent(event)"
dragComplete="traceEvent(event)"
dragDrop="traceEvent(event)"
dragEnter="traceEvent(event)"
dragExit="traceEvent(event)"
dragOver="traceEvent(event)"
dragStart="traceEvent(event)"
effectEnd="traceEvent(event)"
effectStart="traceEvent(event)"
enterState="traceEvent(event)"
exitState="traceEvent(event)"
hide="traceEvent(event)"
initialize="traceEvent(event)"
invalid="traceEvent(event)"
mouseDownOutside="traceEvent(event)"
mouseWheelOutside="traceEvent(event)"
move="traceEvent(event)"
preinitialize="traceEvent(event)"
remove="traceEvent(event)"
resize="traceEvent(event)"
scroll="traceEvent(event)"
show="traceEvent(event)"
toolTipCreate="traceEvent(event)"
toolTipEnd="traceEvent(event)"
toolTipHide="traceEvent(event)"
toolTipShow="traceEvent(event)"
toolTipShown="traceEvent(event)"
toolTipStart="traceEvent(event)"
updateComplete="traceEvent(event)"
valid="traceEvent(event)"
valueCommit="traceEvent(event)"
>

</mx:Panel>
</mx:Panel>

</mx:Application>

結果は以下。

1208918071007:resize
1208918071022:add
1208918071038:preinitialize
1208918071054:childAdd
	1208918071054:add
	1208918071069:preinitialize
	1208918071069:childAdd
		1208918071069:add
		1208918071069:preinitialize
		1208918071069:initialize
	1208918071100:initialize
1208918071100:initialize
	1208918071210:resize
	1208918071210:move
		1208918071225:resize
		1208918071241:creationComplete
		1208918071241:updateComplete
	1208918071241:creationComplete
	1208918071241:updateComplete
1208918071241:creationComplete
1208918071257:applicationComplete
1208918071257:updateComplete

こーみると、子コンポーネントから順に作成されてるのがよく分かる。おもしろい。

Comment



最近のエントリー
カテゴリ
アーカイブ