0

フレックス3互換モードでフレックス3.5からフレックス4.6に移行しています。2つのモジュールでこの警告が表示されました。

Module1は、直接参照されるモジュールまたはアプリケーションです。これにより、Module1とそのすべての依存関係がインデックスにリンクされます。これを回避するには、インターフェイスを使用することをお勧めします。

私はいくつかの機能を持ってmodule1.mxmlおりmodule1controller.as、このモジュールはを使用して多くのアプリケーションファイルにロードされますmx:ModuleLoader。私が言ったように、これは互換性のあるモードなので、これにスパークを使用できるかどうかはわかりません。

この警告の意味がわからないと思います。すべてがアプリケーションで機能します。誰かがこの問題を解決できるインターフェースの例を教えてもらえますか?

4

1 に答える 1

1

これが例です。

あなたはあなたのモジュールがあなたのメインアプリのためにいくつかのことをすることを望みます。たとえば、モジュールにユーザー通知機能を提供させます。

したがって、その機能のインターフェイスを宣言します。

package test
{
    public interface IAlertable
    {
        function alert(message:String):void;
    }
}

次に、モジュールがそのインターフェイスで宣言された機能を提供できることを宣言します。

<?xml version="1.0" encoding="utf-8"?>
<mx:Module xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" layout="absolute" width="400" height="300"
           implements="test.IAlertable"
           >

    <fx:Script>
        <![CDATA[
            import mx.controls.Alert;
            public function alert(message:String):void{
                Alert.show(message,message);
            }
        ]]>

    </fx:Script>
</mx:Module>

そして、メインアプリケーションでは、モジュールクラス名や実装に関心を持つことは決してありません。必要なのは、モジュールに必要な機能があることを知っていることだけです。

<fx:Script>
        <![CDATA[
            import test.IAlertable;

            protected function handleCreationComplete():void
            {
                moduleLoader.loadModule('test/TestModule.swf');         
            }

            protected function testInterface():void{
                var alertModule:IAlertable = IAlertable(moduleLoader.child);
                alertModule.alert('Hello module world!');
            }       

        ]]>
    </fx:Script>

    <mx:ModuleLoader id="moduleLoader" width="100%" height="100%" ready="testInterface()"/>

これで、メインアプリを再コンパイルせずにいつでも機能の実装を変更でき(現在の例では、アラートの代わりにトレースを実行できます)、そのインターフェイスで別のモジュールクラスを作成することもでき、メインアプリは変更に気付くことはありません。

于 2012-12-29T07:34:01.847 に答える