我正在使用flex 3兼容模式从flex 3.5迁移到flex 4.6。我在两个模块中收到了这个警告:
Module1是直接引用的模块或应用程序。这将导致Module1及其所有依赖项与索引链接。建议使用界面来避免这种情况。
我有module1.mxml
和module1controller.as
多个函数,然后使用mx:ModuleLoader
将此模块加载到许多应用程序文件中。就像我说这是兼容模式所以我不确定我是否可以使用火花。
我想我不明白这个警告意味着什么,一切都在应用程序中运行。 有人可以给我一个可以解决此问题的界面示例。
答案 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()"/>
现在您可以随时更改功能的实现而无需重新编译主应用程序(在当前示例中,您可以执行跟踪而不是警报),您甚至可以使用该界面创建不同的模块类,主应用程序将永远不会注意到变化