Flex4迁移中的模块警告

时间:2012-12-28 11:38:22

标签: flex flex4 flex3 flash-builder

我正在使用flex 3兼容模式从flex 3.5迁移到flex 4.6。我在两个模块中收到了这个警告:

Module1是直接引用的模块或应用程序。这将导致Module1及其所有依赖项与索引链接。建议使用界面来避免这种情况。

我有module1.mxmlmodule1controller.as多个函数,然后使用mx:ModuleLoader将此模块加载到许多应用程序文件中。就像我说这是兼容模式所以我不确定我是否可以使用火花。

我想我不明白这个警告意味着什么,一切都在应用程序中运行。 有人可以给我一个可以解决此问题的界面示例。

1 个答案:

答案 0 :(得分: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()"/>

现在您可以随时更改功能的实现而无需重新编译主应用程序(在当前示例中,您可以执行跟踪而不是警报),您甚至可以使用该界面创建不同的模块类,主应用程序将永远不会注意到变化