博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Flex中ModuleManager的一个bug
阅读量:6618 次
发布时间:2019-06-25

本文共 4397 字,大约阅读时间需要 14 分钟。

估且认为它是一个bug吧,因为到目前为止还是没想明白造成问题的原因。

在相对较为复杂或是多人协作的flex项目开发中,使用module进行开发是很平常的事情,而module的加载一般常用的有两种方法:

1、使用ModuleLoader加载器;

2、使用ModuleManager进行加载;

 

使用ModuleLoader进行加载:

// private function loadModule(url:String):void {
if (moduleLoader.url) {
moduleLoader.unloadModule(); } moduleLoader.url = url; }

使用ModuleManager进行加载:

private function load(url:String):void {
var tempModuleInfo:IModuleInfo = ModuleManager.getModule(url); tempModuleInfo.addEventListener(ModuleEvent.READY, onReady); tempModuleInfo.addEventListener(ModuleEvent.PROGRESS, onProgress); tempModuleInfo.addEventListener(ModuleEvent.ERROR, onError); tempModuleInfo.addEventListener(ModuleEvent.SETUP, onSetup); tempModuleInfo.load(ApplicationDomain.currentDomain); } //... private function onReady(evt:ModuleEvent):void {
var tempModuleInfo:IModuleInfo = evt.target as IModuleInfo; container.addChild(tempModuleInfo.factory.create() as DisplayObject); }
 
ModuleManager类负责管理加载的模块,当将模块的url传递到public的ModuleManager.getModule方法中时,则该模块位置就添加到被管理模块的列表中,并返回一个mx.modules.IModuleInfo的实例。
ModuleInfo对象负责加载swf文件,并被封装成一个实现了IModuleInfo接口的代理类,由ModuleManager.getModule方法返回,可以监听代理类上的状态事件,比如:ready、error、setup、progress事件等.
 
mx.events.ModuleEvent类
常量 字符串值 描述
PROGRESS "progress" 加载模块时被调度。可以用这个事件访问被加载模块的bytesLoaded和bytesTotal属性
SETUP "setup" 当已加载了足够的模块内容时被调度
READY "ready" 当模块完成加载时被调度
UNLOAD "unload" 当卸载模块时被调度
ERROR "error" 当模块下载过程中出错时被调度

 

但我在写实际的demo示例时,发现一个问题,如果没有事先声明IModuleInfo类的实例,在使用上面方面加载模块时,第一次加载不会调用任何的方法。完成的示例代码如下:

} private function loadModule(type:Number):void {
var url:String; if (type === 1) {
url = module_1_url; } else {
url = module_2_url; } var tempModuleInfo:IModuleInfo = ModuleManager.getModule(url); //注释或使用下面一行,运行查看不同的效果 _moduleInfo = tempModuleInfo; tempModuleInfo.addEventListener(ModuleEvent.READY, onReady); tempModuleInfo.addEventListener(ModuleEvent.PROGRESS, onProgress); tempModuleInfo.addEventListener(ModuleEvent.ERROR, onError); tempModuleInfo.addEventListener(ModuleEvent.SETUP, onSetup); tempModuleInfo.load(ApplicationDomain.currentDomain); } private function onSetup(evt:ModuleEvent):void {
} private function onProgress(evt:ModuleEvent):void {
msg.htmlText = "正在加载:" + Math.floor(evt.bytesLoaded / evt.bytesTotal).toString() + "%"; } private function onReady(evt:ModuleEvent):void {
var moduleInfo:IModuleInfo = evt.target as IModuleInfo; moduleInfo.removeEventListener(ModuleEvent.PROGRESS, onProgress); moduleInfo.removeEventListener(ModuleEvent.READY, onReady); moduleInfo.removeEventListener(ModuleEvent.ERROR, onError); msg.htmlText = "模块加载完成"; moduleCanvas.addChild(moduleInfo.factory.create() as DisplayObject); } private function onError(evt:ModuleEvent):void {
msg.htmlText = "模块加载出错!"; } private function useLoader():void {
if (moduleLoader.url) {
moduleLoader.unloadModule(); } moduleLoader.url = module_1_url; } ]]>

在上面例子中,事先已经声明过了一个IModuleInfo类的实例,在加载时如果使用该实例进行加载则一切正常,如果不使用已经被声明过的实例加载,则第一次加载时,不会有任何的反应,但使用ModuleLoader是没有此问题的,所以我只能认为这是一个bug了

示例项目工程的目录很简单:

image

如果想使用ModuleManager加载模块,保险的方式就是先声明一个IModuleInfo类的实例,然后使用该实例去加载模块。两种加载模块的优先方法相比,一般更为常用的是第二种,因为可以预加载模块,比较容易按不同的需求来控制模块。

转载于:https://www.cnblogs.com/meteoric_cry/archive/2011/11/03/2234982.html

你可能感兴趣的文章
php取mysql数据库内存,PHP查询MySQL大量数据的内存占用分析
查看>>
mysql分页rownumber,解析数据库分页的两种方法对比(row_number()over()和top的对比)
查看>>
python return break 区别,python 不用break改用return
查看>>
php静态变量的含义,关于PHP静态变量
查看>>
qss 更改图标,更改颜色PNG图像QPushbutton
查看>>
微信 菜单栏 php,微信小程序实现导航栏选项卡的效果
查看>>
oracle 11 grid 安装,Oracle 11gR2 Grid Infrastructure 安装配置系列
查看>>
oracle11g查找正在运行的job,oracle如何查询和停止正在运行的job
查看>>
php打印自定义页眉页脚,例003:自定义页眉和页脚
查看>>
oracle包里代码部分,oracle 获取某个包 依赖的所有对象包括其子对象
查看>>
oracle 自增时输入绑定,oracle性能提高 批量绑定
查看>>
oracle配置linux系统,oraclelinux系统udev配置
查看>>
php修改模块布局,yii 修改模块使用的布局文件
查看>>
oracle使用dba用户导出数据,Oracle创造dba用户+导入导出数据库表
查看>>
linux下attrd进程,【Linux】第二章 Linux进程与线程(下)
查看>>
linux 内核配置 fatfs,微软发布exFAT文件系统规范:推动嵌入Linux内核 支持开箱即用...
查看>>
linux程序中文乱码转换,Linux下汉字编码的转换(gbk转换为utf8)
查看>>
linux tty终端 录屏,在Linux上录制终端的操作
查看>>
linux i3 桌面,Linux 桌面平铺管理器 - i3wm
查看>>
linux文件内容转置,给定一个文件 file.txt,转置它的内容。你可以假设每行列数相同,并且每个字段由 ' ' 分隔....
查看>>