0

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

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

我有几个功能,module1.mxml然后module1controller.as这个模块被加载到许多应用程序文件中,使用mx:ModuleLoader. 就像我说的那样,这是一种兼容模式,所以我不确定我是否可以在上面使用 spark。

我想我不明白这个警告是什么意思,一切都在应用程序中工作。有人可以给我一个可以解决此问题的接口示例。

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 回答