Moduleについて。同じドメインにロードしたら getDefinitionByName() できるぉ。

public class Hoge extends Application {} と public class Fuga extends ModuleBase {} と public class Piyo {} 的な奴らがいるとする。mxmlc -link-report=report.xml -externs=Fuga,Piyo -o=Hoge.swf -- Hoge.mxmlmxmlc -load-externs=report.xml -includes=Piyo -o=Fuga.swf -- Fuga.as 的なことなんかをすると、Hoge.swf と Fuga.swf ができる。
Hoge.swf には Hoge しかいない。一方、Fuga.swf には Fuga と Piyo がいるわけだ。んで、Hoge で ModuleLoader を使って Fuga.swf をロードする。この際、ModuleLoader の applicationDomain プロパティに flash.system.ApplicationDomain.currentDomain を設定してやる。するってぇとモジュールのロード以降は Hogeflash.utils.getDefinitionByName("Fuga") as Class とか flash.utils.getDefinitionByName("Piyo") as Class とかでクラスができるので new してやればインスタンスが作れる。必要に応じて IFuga とか IPiyo とかを親(Hoge)に含めてそれぞれのクラス(FugaやPiyo)で implements しよう。

  • Adobe Flex 3 ヘルプ
  • http://livedocs.adobe.com/flex/3_jp/html/help.html?content=modular_5.html
  • Flex 3 開発ガイド / 高度な Flex のプログラミング / モジュール化アプリケーションの作成 / モジュールのロードとアンロード
    • ModuleManager クラスを使用したモジュールのロード
    • IModuleInfo クラスの load() メソッドでは、オプションで引数として ApplicationDomain および SecurityDomain を指定できます。