MXMLとActionScript

走り書きですが...

flexコンパイラmxmlcMXMLActionScriptの二つをソースとして解釈する
MXMLコンパイラActionScriptに変換している。-keepオプションで変換後のソースを覗ける。
 だから本当はActionScriptだけですべての機能はまかなえる。
・ただし、MXMLを使わないと使えないライブラリがある。(初期化とかが面倒くさすぎてMXMLを使用せずにこのライブラリを使うのは非現実的)
MXML中にActionScriptを書くこともできるので、機能的にはMXML>ActionScript
・でもswfサイズがでかくなるなどの弊害があるのでMXML限定のライブラリを使わないならActionScriptのみで書いたほうがいい。
・じゃあMXMLでしか使えないライブラリって何さ?

・それはUIComponentを継承するクラス群およびUIComponentのための補助クラスのこと
・mxパッケージ下のクラスだからといってMXMLでしか使えないとは限らない。判断の基準はUIComponentが絡むかどうか。
・UIComponentはContainerの中に入れないと使えない。(DisplayObjectの継承クラスだからSpriteの子として追加しようとしてもコンパイルエラーにはならないが、実行しても表示されない)
・しかも、ContainerはUIComponentの子クラスなのでContainer自身もContainerに入っている必要がある。
・どうどうめぐりで最初のContainerはどこから来る?
MXMLでアプリを作ると、表示ツリーの一番上がmx.Application(Containerの子クラス)になるので、ここに他のUIComponentを追加していくことができる。

・メインクラスがActionScriptの時はMXMLは使えなくなるが、メインクラスがMXMLの時はActionScriptと共存が可能
・たとえばMXMLActionScriptで作ったコンポーネントを記述することができる
・またActionScriptで記述した非UIComponentのSpriteは、UIComponentの子として追加できる。Containerの直接の子としてはUIComponentしか追加できないので、非UIComponentのSpriteはUIComponentでラップしてやる必要がある。