flex开发中将各个功能分解到模块中,但在加载各个模块的时候需要注意一下问题:
加载方法:
private function init():void
{
module = mx.modules.ModuleManager.getModule("UIModule/HR/Holiday/Config/frmHolidayMain.swf");
module.addEventListener(mx.events.ModuleEvent.READY,ready);
module.load();
// general=ModuleLoader(mx.managers.PopUpManager.createPopUp(this,ModuleLoader));
//
// general.url="test3.swf";
//
// general.loadModule();
}
private function ready(e:ModuleEvent):void
{
var moduleInfo:IModuleInfo = e.target as IModuleInfo
var wind:MDIWindow = new MDIWindow();
wind.addChild(moduleInfo.factory.create() as DisplayObject);
testcanvas.windowManager.add(wind);
}
需要注意的一点是 module 对象的定义一定要定义为全局的否则ready事件是不能执行的。具体原因不知道,个人理解为到ready方法中无法找到module对象了
flex 装载多个module出现的问题Error #1034: 强制转换类型失败 收藏
摘自http://bzhang.iteye.com/blog/322148
TypeError: Error #1034: 强制转换类型失败:无法将 Object@1aee90b1 转换为 mx.messaging.messages.IMessage。
需求背景 :
通过树形菜单加载多个不同的module。
问题现象 :module页面存在拖动,Popup,Alert或者colorpicker出现错误信息:
TypeError: Error #1034: 强制转换类型失败:无法将 mx.managers::PopUpManagerImpl@7155ac1 转换为 mx.managers.IPopUpManager。
解决方案 :
在Application加入如下代码引用:
< mx:Script >
<! [CDATA[
import mx.managers.DragManager;
import mx.managers.IPopUpManager;
/* Create dummy variables. */
// 避免出现:无法将 mx.managers::PopUpManagerImpl@52a09a1 转换为 mx.managers.IPopUpManager 错误
private var dragManager : DragManager;
private var popUpManager : IPopUpManager;
//process....
]]>
</mx:Script>
问题原因分析 :
属于ModuleLoader shared code problem .
当Module中使用managers时(如PopUpManager,DragManager, HistoryManager等)则可能出现这个问题(当application里在loader之前没有引入这些manager的引用时)。
manager 的方法是静态方法,整个应用程序中创建了一个该manager接口的singleton实例,但module仅在自己的 Application domain中使用该单例, 当多个module使用同一个单例manager且main application没有使用时,就会出现这个空对象引用问题:第一个引入某manager的module不能将该manager接口的 singleton跟其他module共享,其他module调用该Manager的方法时,应用程序不会再创建该manager接口的实例,这个 module就无法引用到该manager接口的实例,就出现了空对象引用问题.
参考资料:Flex sdk源码。
目前在Application创建了些Application范围内没有使用到的"木偶变量",从代码可读性上来说不是很好。有其他比较好的解决方案的同学麻烦请告之下,:)
posted on 2008-11-22 17:33 钩子 阅读(1118) 评论(1) 编辑 收藏 所属分类: jee 、ria 、工作笔记
<noscript type="text/javascript"> //<![CDATA[ Sys.WebForms.PageRequestManager._initialize('AjaxHolder$scriptmanager1', document.getElementById('Form1')); Sys.WebForms.PageRequestManager.getInstance()._updateControls(['tAjaxHolder$UpdatePanel1'], [], [], 90); //]]> </noscript>
Feedback
# re: FLEX:multiple moduleloader occur #1034 error 2008-11-24 10:14 钩子
同事推荐了个更好的办法:
在ModuleLoader 的creationComplete方法中加入如下代码:
moduleLoader.applicationDomain = ApplicationDomain.currentDomain;
就可以在Application里切换多个module而不需要在Application里明文引用单例manager声明。比我上面所说的方法更好的能解决问题而且,代码可读性更好。
另外,推荐在moduleloader做切换的时候,加上:
moduleLoader.unloadModule再做moduleLoader.loadModule().
在这里做个小记。
http://blog.csdn.net/yzsind/archive/2009/03/27/4031066.aspx
分享到:
相关推荐
Flex模块化开发是一种高效构建大型复杂应用的策略,它允许我们将应用程序分解为多个独立的、可重用的组件或模块,以提高代码的可维护性和可扩展性。在这个实例中,我们将深入探讨Flex模块化开发的关键概念和技术。 ...
3. **模块加载器**:`mx:ModuleLoader`组件是负责加载和卸载模块的核心组件。它可以设置属性如`source`来指定模块的URL,或者使用`moduleFactory`属性来指定自定义的模块工厂。 4. **模块生命周期**:Flex模块有其...
创建Flex模块涉及到几个关键步骤: 1. **定义模块**:首先需要定义一个模块,通常这涉及创建一个新的Flex项目,并指定其为主模块或普通模块。 2. **实现`IFlexModuleFactory`接口**:每个模块都必须包含一个实现了`...
- **定义**:在 Flex 中,模块是实现了 `IFlexModuleFactory` 接口的 SWF 文件,可以在运行时动态加载和卸载,从而提供代码的动态加载能力。 - **原理**:Flex 应用程序由两种类型的 SWF 文件组成:Application...
Flex模块间通信是Adobe Flex应用程序开发中的一个重要概念,它允许不同模块之间共享数据、功能和服务。在大型项目中,模块化设计有助于代码组织和管理,提高代码复用性,同时降低复杂度。本示例将深入讲解如何在Flex...
"Flex动态加载CSS实例"就是一个这样的实践,它旨在解决在运行时按需加载CSS的问题,从而提高页面加载速度并降低初始加载时的带宽消耗。 Flex在这里可能指的是使用Flex布局(Flexible Box Layout),这是一种现代的...
Flex模块化主要通过Flex Module Framework(模块框架)实现,这是一个内置于Flex SDK中的组件,支持在运行时动态加载和卸载模块。这种动态加载能力使得Flex应用程序能够根据用户需求或网络状况来决定加载哪些模块,...
2. **模块加载器**:`mx:ModuleLoader`标签是Flex中用来加载和显示模块的主要容器。在这个例子中,我们创建了一个名为`currentModule`的`ModuleLoader`实例,并为其添加了`ready`事件处理器`readyModule`。 - `...
标题中的“flex加载各种底图”指的是使用Adobe Flex这一编程框架来实现地图应用,加载不同类型的底图数据。Flex是基于ActionScript 3.0的开放源代码框架,主要用于构建富互联网应用程序(RIA)。在地图应用中,底图...
4. **WarmC技术**:标签中的“WarmC”可能是指“Warm Cache”,在Flex模块加载中,意味着已加载过的模块在内存中保持“热”状态,即保持活动和可用,这样在下次需要时能更快地提供服务,提高了应用的响应速度。...
在Flex开发中,`ModuleLoader` 是一个关键组件,它允许开发者动态地加载MX模块(即Flex模块,独立的SWF文件)。`ModuleLoader` 的主要功能是将模块的加载过程与应用程序的其余部分分离,这有助于实现代码的模块化和...
这篇文章将深入探讨关于使用Flex和Flash生成SWF文件时所遇到的加载(体积)问题。SWF是Adobe Flash Player用于播放多媒体内容的文件格式,通常包含了动画、音频、视频和交互式元素。 Flex是一个开源的开发框架,...
本文将深入探讨如何通过创建和使用SWC库来避免Flex RSL的重复加载,以提高模块加载的性能。 首先,理解SWC(Software Component)是Flex中的一个关键概念。SWC文件是一种静态库格式,可以包含ActionScript类、资源...
模块(Module)是创建大型Flex应用程序的一个解决方案,它允许你将你的用户接口分割成许多分散的有各自用途的小块。例如(下面出自Flex 2的文档),一个保险公司可能有数百个表单——针对于各个领域的,针对各种请求...
1. 动态加载SWF模块,实现程序的模块化设计。 2. 实时更新内容,如在线更换广告或用户头像。 3. 加载远程数据并转换为显示对象,如XML数据加载后解析为SpriteSheet。 总结,Loader类是Flex和ActionScript 3中不可或...
7. 模块化开发:使用Flex模块(Module)可以提高代码复用性和项目组织,但需注意模块间的通信和加载策略。 总之,学习Flex过程中,遇到问题要深入理解其原理,结合实际场景灵活运用,同时关注官方文档和社区资源,...
10. **Flex模块化**:通过模块(Module)机制,开发者可以将大型应用拆分为多个小的、可独立加载的单元,以优化加载时间和资源管理。 11. **移动开发支持**:Flex 4.5版本开始,增加了对移动设备的支持,能够创建...
JSP的脚本let和表达式可以用来动态地生成Flex模块的配置信息,比如传递参数到Flex模块,或者根据服务器端的状态决定加载哪个模块。 6. **Servlets和Filter**: 在JSP和Flex通信过程中,Servlets可以作为数据处理...
接下来,按照以下步骤在IntelliJ IDEA中创建一个新的Flex模块项目: 1. **启动IntelliJ IDEA**:确保已经安装了IntelliJ IDEA EAP版本。 2. **新建项目**:点击“File”菜单中的“New Project”选项,进入“New ...