主なプロジェクトがあり、別のプロジェクトの swf をそこにロードしたい:
//loader code in Main class of main project
var url:URLRequest = new URLRequest("../src/components/TextTool.swf");
var ttWrapper:UIComponent = new UIComponent();
var ldr:SWFLoader = new SWFLoader();
var context:LoaderContext = new LoaderContext();
if (Security.sandboxType == Security.LOCAL_TRUSTED) {
context.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);
} ldr.source = "../src/components/TextTool.swf";
ldr.loaderContext = context;
ldr.addEventListener(Event.COMPLETE, onLoadComplete);
ldr.load();
can.addElement(ldr);
2 番目のプロジェクトの Main クラスのコードは次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:stark="stark.*" name="textModule" >
<stark:TextTool name="myTF" id="myTF"></stark:TextTool>
</s:Application>
これで、両方のプロジェクトにインターフェイス ファイルが含まれます。同じコードの IModule と、s:Group を拡張して実装するカスタム クラス「TextTool」のインスタンスである 2 番目のプロジェクト (ロードされるプロジェクト) の要素です。 Iモジュール:
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" width="400"
xmlns:com="src"
height="130" creationComplete = "initText()" implements="IModule"></s:Group>
swf をロードしたらすぐに、"myTF" の ID を持つ TextTool インスタンスにアクセスしたいと思います。
//Code in the main class of the main project
trace(getQualifiedClassName(mySwf.getChildByName('textModule')['myTF']));
trace(mySwf.getChildByName('textModule')['myTF'] is IModule);
//output:
//stark::TextTool
//false
上で述べたように、私は両方のプロジェクトに同じコードのインターフェイスを持ち、メイン クラスへの相対パスは同じで、myTF は IModule を拡張します。swf がロードされた後、正しい要素を取得しますが、IModule を実装しているかどうかを確認すると、まだ false になります。なんで?