MXMLでコンポーネントに分割できないケース

Flexは、MXMLを使うことで、asですべて書くよりはデザインがはるかに楽になり、ロジックに集中できるのですが、やはりフレームワークに任せる弊害は生まれます。

自分の経験したことを2点ほど書きます。

①@Embedメタデータタグを使えるのはそのMXML内に限る。

という、を含む独自コンポーネントを作ったとします。
前回の記事の画像からおわかりかと思いますが、フットサルボードのコマにあたるものです。
Pieceはボールも入れると11個あり、同じPiece.mxmlを使うなら、Piece.mxml内に、どの画像を使うかはハードコーディングできません。
Piece.mxml内で@Embedは使えないのですね。

しかし、起動時に画像を読み込むよりは、@EmbedでSWFに画像を埋め込んで、起動を高速化したい。
なので、起動時の初期化中に、各Pieceのに@Embedを代入したり、[Bindable][Embed]で作ったClassを渡すのはうまくいかない。

詳細までは知りませんが、mxmlはビルドによってas3に分解されます。
JSPサーブレットの関係に似てますね。
@Embedや[Bindable][Embed]で作ったClassは、ひとつのMXML内に閉じていて、source='@Embed'みたいな静的な記述になっていたらいいけど、そうでないとmxmlコンパイラが解釈できない。
だから、コンポーネントに下手に分割すると、このようなコンパイル時に解決する便利機能は使えなくなります。
まあMXMLを使わないでas3で書こうと同じことですけどね。
当然と言えば当然です。

コンポーネントの中でさらにコンポーネントを呼ぶと、ソフトキーボードによるせり上がりがうまくいかない。

FlexモバイルではAlertにあたるものは自作します。
http://d.hatena.ne.jp/DiegoTristan/20111024/1319480283
Viewの中においている自作コンポーネントの中に、さらにそのエラーダイアログを入れていたとします。
Viewの場合、ソフトキーボードがせりあがると自動的にサイズ計算して画面がせりあがってくれますが、そこで計算に含まれるのはViewの中に直接書かれているコンポーネントまで。
そのコンポーネントの中にさらに含まれているコンポーネントまではサイズ計算に含まれないようです。

なので、エラーダイアログがせりあがらず、ソフトキーボードに隠れます。


まあこういうことがあるので、MXMLの便利な機能を使うと、その分、デザインをコンポーネント化して分割するのに限界が生まれるわけですね。
まあ②はバグといってしまっていいかもしれませんが。。。
Flexはソース公開されているので、気合があればソースを読んで制限を理解するのがよいと思います。