各モジュール (またはすべてのモジュールがサブスクライブする 1 つのメイン インターフェイス) のインターフェイスを作成し、モジュールの外部で呼び出す必要があるメソッドを定義する必要があります。このようにして、モジュール自体ではなくインターフェイスと対話しますが、インターフェイス メソッドはモジュール クラスとメイン アプリケーションの間を仲介します。
IModuleInfo
によってロードされたインターフェイスを使用するModuleManager
と、これに到達するのに役立ちます。詳細については、このページを参照してください。
<?xml version="1.0"?>
<!-- modules/ModuleLoaderApp.mxml -->
<s:Application
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
creationComplete="initApp()">
<s:layout>
<s:VerticalLayout/>
</s:layout>
<fx:Script>
<![CDATA[
import mx.events.ModuleEvent;
import mx.modules.ModuleManager;
import mx.modules.IModuleInfo;
import mx.core.IVisualElement;
public var info:IModuleInfo;
private function initApp():void {
info = ModuleManager.getModule("ColumnChartModule.swf");
info.addEventListener(ModuleEvent.READY, modEventHandler);
/* Load the module into memory. Calling load() makes the
IFlexModuleFactory available. You can then get an
instance of the class using the factory's create()
method. */
info.load(null, null, null, moduleFactory);
}
/* Add an instance of the module's class to the display list. */
private function modEventHandler(e:ModuleEvent):void {
/* For MX containers, cast to a DisplayObject. */
vb1.addChild(info.factory.create() as DisplayObject);
/* For Spark containers, cast to a UIComponent. */
vg1.addElement(info.factory.create() as IVisualElement);
}
]]>
</fx:Script>
<!-- MX container -->
<mx:VBox id="vb1">
<s:Label text="Module loaded in MX VBox container:"/>
</mx:VBox>
<!-- Spark container -->
<s:VGroup id="vg1">
<s:Label text="Module loaded in Spark VGroup container:"/>
</s:VGroup>
</s:Application>
特定のモジュールとそのメソッドおよびプロパティを制御できる独自のインターフェイスを作成できることに注意してください。たとえば、私は最近、2 つのコンポーネントへの参照を返すインターフェイスを作成しました (これらは のインスタンスですGroup
が、としてキャストされますUIComponent
)。
package main.flex.interfaces
{
import flash.events.Event;
import flash.events.IEventDispatcher;
import mx.core.UIComponent;
public interface IMyModuleName extends IEventDispatcher
{
function get mainGroup():UIComponent;
function get buttonRow():UIComponent;
function init(event:Event):void;
}
}
モジュール自体で、インターフェイスのmainGroup
またはbuttonRow
プロパティにアクセスすると、次のような名前付きグループが返されます。
public function get mainGroup() : UIComponent {
return someGroup;
}
...
<s:Group id="someGroup">
<!-- content -->
</s:Group>
これらは単純化されており、実際の ID を使用していませんが、それらからアイデアを得ることができるはずです。