tohokuaikiのチラシの裏

技術的ネタとか。

DisplayObjectContainer.addChild()には色々な処理が含まれる

mxmlmxml中でIncludeするのではなく、newしてaddChildする際には実はいろんなことが行われているという点。

AdobeのUIComponentのリファレンスによると

  1. new してインスタンスを作成
  2. インスタンスにプロパティやイベントリスナを登録
  3. addChild()する

の、addChild()する際に

このメソッドはまず preinitialize イベントを送出し、このコンポーネントを使用する開発者が、内部構造が作成される前にコンポーネントを変更できるようにします。次に、createChildren() メソッドを呼び出してコンポーネントの内部構造を作成します。Button の場合、このメソッドはラベル用の UITextField を作成し、追加します。次に、initialize イベントを送出し、内部構造が作成された後に開発者がコンポーネントを変更できるようにします。

なんで、

    1. dispatch(FlexEvent.PREINITIALIZE)
    2. インスタンスのcreateChildren()
    3. dispatch(FlexEvent.INITIALIZE)
    4. dispatch(FlexEvent.CREATION_COMPLETE)
    5. dispatch(Event.ADDED)

って感じか。4と5はどっちが先か調べないと。だけど、多分CREATION_COMPLETEしないとADDできそうにないのでこの順番だろうな。