asでカスタムコンポーネント(2)

個人的には落ち込んだり反省したりスネてみたりしている毎日ですが、仕事は相変わらずFlex一色です。
そのわりに基本的なスキルはまったく上がっていませんね。
むしろ落ちてるかも(--;


前回がやたらとウダウダ長く書いていたので、今回は的を絞ってすこしずつ書こうかと。
というよりも部屋に暖房がないので夜間になると耐えられないんですね。
今日はcreateChildrenとchildrenCreatedの話。
ま、中身は薄いんですが。


createChildren()は、コンポーネントが生成される時に初回だけ実行される、子コンポーネントの追加を行うためのメソッドです。
初回だけ実行されるので、通常は「やたらと実行中にaddしたりremoveしたりしないコンポーネント」の追加に使用します。
たとえば「閉じるボタンつきウィンドウ」の閉じるボタンとか、そういう静的なヤツです。
逆に、やってくるデータに応じて増えたり減ったりするコンポーネントは、commitProperties()で追加や削除を行うのが普通です。少なくとも僕はそう思っています。ええ。・・・List系は違いますけどね・・・。
で、updateDisplayListでmoveやsetActualSizeといったメソッドを駆使して内部コンポーネントの位置決定を行う、と。
ここは長くなるのでまた今度。


もうひとつのchildrenCreated()は、デフォルトの内部コンポーネントが出揃った段階で呼び出されるメソッドです。


MXMLでカスタムコンポーネントを作る際に、creationCompleteイベントハンドラで初期設定をしている人は多いですよね。
childrenCreated()は初回のupdateDisplayListよりも前に呼び出されるので、createChildrenで作成したコンポーネントの初期設定をしたりする際に何かと便利です。
asだけでカスタムコンポーネントを作る際にはそれらに対するBindingやイベントリスナーの設定も行う必要があるわけですが、それらの処理をここでまとめるといいかも。
とはいえ、大抵はcreateChildren()の最後に入れても同じようなものなので、ま、豆知識のようなもんですね(^^;


コンテナを継承したコンポーネントを作る場合、静的な部品はrawChildrenのほうにaddChildするようにしましょう。
rawChildrenに入れておけば、通常のgetChildren()にこれらの部品が混じらないので使い勝手がよくなります。
これは、MXMLで部品を配置する場合との明らかな違いということができます。
(getChildrenで取れてくる部品の配列に、いちいち閉じるボタンが混じってたらやりにくいでしょう?)
それに、includeInLayout=falseと指定するまでもなく、レイアウトエンジンの影響を受けずに済みます。
親がVBoxだろうがListだろうが、絶対位置で配置できるということです。


次回はcommitPropertiesとupdateDisplayListについて。
とりあえずList系の話はヌキで・・・。