- 浏览: 60755 次
- 来自: 北京
文章分类
最新评论
-
pengylfighting:
太感谢了
tomcat启动慢问题 -
shoushou2001:
很好很强大,
项目在tomcat中能运行,可是在WebLogic中部署就跑错的解决方案 -
java风:
严重错误 主要是程序的错误
WARN 为一般警告,比如ses ...
配置Log4j
Module
Module加载是Adobe解决Flex系统应用初始化时较大的下载负载而设计的一种折中方案。Module是为自己项目准备的,如果你的项目编译后大小是1.5MB,那么也许在你使用module把项目合理分割以后大小会是 700K + 200K+ 100K+200K+ 200K+200K。为什么后面的模块体积会变小,就是因为公有的类引用没有重复编译到他们之中了。 所以Module是为同一个项目准备的,他们之间有很强的依赖关系,并不是为其他项目提供 "包" 。
Module 实际上是一个预编译的SWF文件。虽然是SWF格式的文件,但是这个文件不能独立运行,并且只能被ModuleLoader加载后才能显示。逻辑上它是一个容器,可以像一般的容器一样包含别的容器,组件,甚至是别的Module模块。根据需要,预编译的Module模块可以被应用加载和卸载。
Flex Builder中创建Module
可以使用<mx:Module>创建Module类;令一种方式采用ModuleManager类在ActionScript中创建Module模块类。在Flex Builder创建Module非常方便,如下图:
在编译的时候就会生成一个和mxml文件同名的swf文件。
AS中创建Module
如果您编写仅 ActionScript 模块,则可以扩展mx.modules.ModuleBase类。如果 是MXML 文件中的 <mx:Module> 标签编写基于 MXML 的模块,就应该扩展 mx.modules.Module类,它会将其加入到可视化显示列表。
Module域
通常将模块载入一个子域,那么模块里面的类定义都不是application域的。比如第一个模块载入了类PopUpManager,那么整合Application中,它就成了PopUpManager的拥有者,因为像这种manager都是单例的,如果另外一个模块稍后要使用这个PopUpManager,就会引发运行时异常。
解决办法就是确保这些managers,比如PopUpManager and DragManager或者其他一些共享的服务 是在application中定义的,这样就能确保所有模块都能够使用。在main Application中:
- import mx.managers.PopUpManager;
- import mx.managers.DragManager;
- private var popUpManager:PopUpManager;
- private var dragManager:DragManager;
import mx.managers.PopUpManager; import mx.managers.DragManager; private var popUpManager:PopUpManager; private var dragManager:DragManager;
这项技术同时也应用到组件中,当module第一次使用组件时,将在它自己的域中拥有这些组件的类定义。如果别的module试图使用这些已经被另一个module使用的组件,它的定义将会不能匹配到现存的定义中。因此,为了避免组件的定义不匹配,在主应用程序中创建组件的实例,让所有的module去引用。
但是这个坏处很明显,这些声明莫名其妙,成为了一个"木偶变量",所以在网上找到另一种办法,参见
http://www.blogjava.net/alex0927/archive/2008/11/24/241989.html?opt=admin,
在ModuleLoader 的creationComplete方法中加入如下代码,表示将其加载到运行时库
moduleLoader.applicationDomain = ApplicationDomain.currentDomain;
对于使用ModuleManager,可以在IModuleInfo的load方法里面指定域。
有关于应用程序域内容存可以参考下面几篇文章:
http://hereson.iteye.com/blog/192337
http://bufanliu.iteye.com/blog/200594
ModuleLoader
Flex中的ModuleLoader组件为模块的载入提供和很方便的接口,它是高层的处理Module的API。
可以这种在flex中简单的使用module
<mx:ModuleLoader url="MXMLDemoModule.swf"/>
也可以在编程时动态的改变URL,来加载不同的Module。
ModuleLoader其实是一种特殊的导航式容器。和一般导航式容器如ViewStack不同的是,ModuleLoader不必在初始化时携带加载所有的孩子组件。
另外,推荐在moduleloader做切换的时候,加上:moduleLoader.unloadModule再做moduleLoader.loadModule()。Flex确保调用load()方法只有一个对象。
ModuleManager
ModuleManager类提供了低层次的处理Module的装载卸载以及事件响应等的变成接口。这种方式比起纯粹的ModuleLoader方式稍微复杂一点,但是ModuleManager提供了比ModuleLoader更加强大的能力来管理Module模块的加载过程。
具体操作可以分成以下几步:
1.通过ModuleManager实例的getModule()方法拿到Module模块的一个索引,索引类型为IModuleInfo。
2.调用这个索引的load()方法。
3.利用这个接口的factory属性拿到它相关连的Module工厂,调用此工厂的create()方法,并将返回值强制转换成当前的Module类型。
看以下代码:
- private var module:IModuleInfo;
- module = ModuleManager.getModule("UserList.swf");
- module.addEventListener(
- ModuleEvent.READY,onModuleReadyUseModuleManager);
- module.load();
- private function onModuleReadyUseModuleManager(event:Event):void{
- var me:ModuleEvent = event as ModuleEvent;
- userList = me.module.factory.create() as UserList;
- container.addChild(userList);
- }
private var module:IModuleInfo; module = ModuleManager.getModule("UserList.swf"); module.addEventListener( ModuleEvent.READY,onModuleReadyUseModuleManager); module.load(); private function onModuleReadyUseModuleManager(event:Event):void{ var me:ModuleEvent = event as ModuleEvent; userList = me.module.factory.create() as UserList; container.addChild(userList); }
在调用create()方法的时候,可以先不加入显示列表,这样就可以先将module载入内存,需要的时候再加入显示列表。
加载过程的事件
这个倒不是ModuleManager特有的,ModuleLoader也有,就是setup,ready,unload,progress,error等事件。
Progress事件
- protected function onModuleProgress (e:ModuleEvent) : void {
- trace ("ModuleEvent.PROGRESS received: " + e.bytesLoaded + " of " + e.bytesTotal + " loaded.");
- }
protected function onModuleProgress (e:ModuleEvent) : void { trace ("ModuleEvent.PROGRESS received: " + e.bytesLoaded + " of " + e.bytesTotal + " loaded."); }
主要就是bytesLoaded和bytesTotal,分别表示已经加载的字节数和总共的字节数。
模块与应用之间的访问
Application访问模块
用ModuleLoader载入的模块,application可以用child来访问module中的方法。比如在模块中有一个公共的objectMethod方法
s = (m1.child as loaderModule).objectMethod();
如果使用ModuleManager,那么可以向下面这样:
public var sm:Object=moduleInfo.factory.create() as loaderModule; s = sm. objectMethod;
Application中
- var ichild:* = mod.child as IModuleInterface;
- if (mod.child != null) {
- ichild.setAdjusterID(myId.text);
- ichild.setBackgroundColor(myColor.selectedColor);
- }
var ichild:* = mod.child as IModuleInterface; if (mod.child != null) { ichild.setAdjusterID(myId.text); ichild.setBackgroundColor(myColor.selectedColor); }
模块访问Application
主要是使用parentApplication 属性:
- // testProperty可以是application的一个属性或者方法,当然module的可移植性几乎就没有了
- var aa:Object=this.parentApplication.testProperty;
// testProperty可以是application的一个属性或者方法,当然module的可移植性几乎就没有了 var aa:Object=this.parentApplication.testProperty;
模块访问模块
有两个模块,可以通过Application来访问:
<!----> 给ModuleLoader传递参数
采用给url传递参数的方式,下面的是载入module的url 在模块中
<mx:ModuleLoader url="InterModule1.swf" id="m1"/>
<mx:ModuleLoader url="InterModule2.swf" id="m2"/>
s = parentApplication.m1.child. objectMethod ();
var s:String = "QueryStringModule.swf?" + "firstName=" +ti1.text + "&lastName=" + ti2.text;
- salutation = "Welcome " +o.firstName + " " + o.lastName + "!";
- } else {
- salutation = "Full name not entered."
- }
var myPattern:RegExp = /.*\?/; var s:String = this.loaderInfo.url.toString(); s = s.replace(myPattern, ""); var params:Array = s.split("&"); var keyStr:String; var valueStr:String; var paramObj:Object = params; for (keyStr in paramObj) { valueStr = String(paramObj[keyStr]); ta1.text += keyStr + ":" + valueStr + "\n"; } for (var i:int = 0; i < params.length; i++) { var tempA:Array = params[i].split("="); if (tempA[0] == "firstName") { o.firstName = tempA[1]; } if (tempA[0] == "lastName") { o.lastName = tempA[1]; } } if (StringUtil.trim(o.firstName) != "" && StringUtil.trim(o.lastName) != "") { salutation = "Welcome " +o.firstName + " " + o.lastName + "!"; } else { salutation = "Full name not entered." }
利用接口避免耦合
模块文件IModuleInterface
- [Bindable]
- private var bgcolor:Number;
- public function setAdjusterID(s:String):void {
- adjuster = s;
- }
- public function setBackgroundColor(n:Number):void {
- bgcolor = n;
- }
- public function getModuleName():String {
- return "Auto Insurance";
- }
- ]]>
- </mx:Script>
- </mx:Module>
<?xml version="1.0"?> <!-- modules/interfaceexample/AutoInsurance.mxml --> <mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%" implements="IModuleInterface"> <mx:Panel id="p1" title="Auto Insurance" width="100%" height="100%" backgroundColor="{bgcolor}"> <mx:Label id="myLabel" text="ID: {adjuster}"/> </mx:Panel> <mx:Script> <![CDATA[ [Bindable] private var adjuster:String; [Bindable] private var bgcolor:Number; public function setAdjusterID(s:String):void { adjuster = s; } public function setBackgroundColor(n:Number):void { bgcolor = n; } public function getModuleName():String { return "Auto Insurance"; } ]]> </mx:Script> </mx:Module>
我们可以定义一个ActionScript接口,Module模块对象实现了这个接口中定义的方法和属性,那么主应用Application就可以访问这个接口中定义的属性和方法。接口中定义了Module模块对象和主应用Application需要共享的数据和方法,是两者间共同的一个契约,同时也实现了接口和实现的分离,达到了松耦合的目的。
接口
- package{
- import flash.events.IEventDispatcher;
- public interface IModuleInterface extends IEventDispatcher {
- function getModuleName():String;
- function setAdjusterID(s:String):void;
- function setBackgroundColor(n:Number):void;
- }
- }
package{ import flash.events.IEventDispatcher; public interface IModuleInterface extends IEventDispatcher { function getModuleName():String; function setAdjusterID(s:String):void; function setBackgroundColor(n:Number):void; } }
发表评论
-
Flex事件效果与渲染
2011-11-28 15:38 857触发器名称 对 ... -
SystemManager: Every Flex application’s best friend
2011-11-16 09:54 636SystemManager: Every Flex appli ... -
preloader
2011-11-14 15:55 467Flex 的默认的 Preloader, 平心而论,不是很 ... -
xml小心障眼
2011-11-11 18:13 0test.xml: <?xml version=& ... -
itemRenderer
2011-11-11 16:15 1265理解itemRenderer Flex中提供了大 ... -
Flex的注释
2011-11-11 15:28 595一.在<mx:script>标签中写注释 1.用 ... -
flex与js交互
2011-11-09 16:47 522一、在JavaScript中调用Flex方法在Flex中可以用 ... -
Flex Data Binding详解
2011-11-09 15:33 536转载-- Data BindIng简单的说就是当绑定源 ... -
callLater解析
2011-11-09 11:10 712转载-- Flash的fl组件和Flex的mx组件 ... -
在Flex中让Tree绑定数据后自动展开树节点
2011-11-09 11:00 659转载-- 用Flex/Flash做开发的同志们应该会 ... -
flex百条常用知识
2011-11-07 11:12 0flex百条常用知识 【 ... -
Flex 自定义事件
2011-11-07 11:09 568Flex 自定义事件 public static co ... -
AS3 数据类型转换 (转)
2011-11-07 10:22 1194AS3 数据类型转换 (转) ... -
AS3中遍历xml
2011-11-07 10:16 643AS3中遍历xml ... -
flex 数据基础-使用XML和XMLList
2011-11-07 10:08 629flex 数据基础-使用XML和XMLList ... -
flex 数据基础-使用XML和XMLList
2011-11-07 10:07 860flex 数据基础-使用XML和XMLList ... -
Flex自定义事件用法指南
2011-11-06 11:09 630Flex自定义事件用法指南 本文向大家介绍一下Fle ... -
Flex的Array和ArrayCollection
2011-11-06 10:39 5081.array作为控件使用 FLEX3写法: ... -
flex命名空间
2011-11-04 11:17 0Flex 4带给我们的,是全新的命名空间。了解这些命名空间必 ... -
沙箱安全
2011-11-04 11:08 0Flex的最重要两个文件:MXML文件与AS文件。 M ...
相关推荐
赠送jar包:jackson-module-jaxb-annotations-2.7.8.jar; 赠送原API文档:jackson-module-jaxb-annotations-2.7.8-javadoc.jar; 赠送源代码:jackson-module-jaxb-annotations-2.7.8-sources.jar; 赠送Maven依赖...
./configure --prefix=/usr/local/nginx-1.6.0 --add-module=../nginx-sticky-module-1.25 --without-http_ssi_module --without-http_autoindex_module --without-http_fastcgi_module --with-...
赠送jar包:jackson-module-jaxb-annotations-2.2.3.jar; 赠送原API文档:jackson-module-jaxb-annotations-2.2.3-javadoc.jar; 赠送源代码:jackson-module-jaxb-annotations-2.2.3-sources.jar; 赠送Maven依赖...
赠送jar包:jackson-module-scala_2.11-2.6.7.1.jar; 赠送原API文档:jackson-module-scala_2.11-2.6.7.1-javadoc.jar; 赠送源代码:jackson-module-scala_2.11-2.6.7.1-sources.jar; 赠送Maven依赖信息文件:...
赠送jar包:powermock-module-junit4-2.0.9.jar; 赠送原API文档:powermock-module-junit4-2.0.9-javadoc.jar; 赠送源代码:powermock-module-junit4-2.0.9-sources.jar; 赠送Maven依赖信息文件:powermock-...
Nginx-Module-VTS是Nginx的一个增强模块,主要功能是提供详细的Web服务器访问统计和性能监控。Prometheus是一款流行的开源监控和警报工具,广泛用于收集和分析各种系统的指标。在本场景中,Nginx-Module-VTS与...
赠送jar包:jackson-module-jaxb-annotations-2.7.8.jar; 赠送原API文档:jackson-module-jaxb-annotations-2.7.8-javadoc.jar; 赠送源代码:jackson-module-jaxb-annotations-2.7.8-sources.jar; 赠送Maven依赖...
解压之后安装如下:mv nginx-module-vts-0.1.18 /usr/local/ yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel cd /usr/local/nginx/nginx-1.13.7 ./configure --add-module=/...
headers-more-nginx-module-0.37.tar
在Jeesite4.0版本中,有两个重要的组件:`jeesite-module-core-4.0-SNAPSHOT.jar`和`jeesite-module-devtools-4.0-SNAPSHOT.jar`,它们构成了Jeesite4.0的核心和开发工具部分。 首先,我们来看`jeesite-module-core...
赠送jar包:jackson-module-paranamer-2.7.9.jar; 赠送原API文档:jackson-module-paranamer-2.7.9-javadoc.jar; 赠送源代码:jackson-module-paranamer-2.7.9-sources.jar; 赠送Maven依赖信息文件:jackson-...
赠送jar包:powermock-module-junit4-common-2.0.9.jar; 赠送原API文档:powermock-module-junit4-common-2.0.9-javadoc.jar; 赠送源代码:powermock-module-junit4-common-2.0.9-sources.jar; 赠送Maven依赖信息...
【Nginx-HTTP-FLV-Module-Master】是一个专为Nginx服务器设计的扩展模块,旨在增强其对HTTP FLV(Flash Video)流的支持,并且特别强调了对h265视频编码格式的兼容性。这个模块使得Nginx能够作为一个高效的流媒体...
在给定的标题“ni-labview-2019-dsc-module-runtime-system-x86_19.0.0_offline.rar”中,我们可以了解到这是一款针对x86架构的NI LabVIEW 2019 Data Streaming and Control (DSC) 模块的运行时系统离线安装包,版本...
./configure --add-module=../nginx-upload-module-2.3.0 \ --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-pcre make sudo make install ``` 这里的 `--with-http_ssl_module` 参数表示启用 ...
jackson-module-jaxb-annotations-2.8.8.jar
`nginx-upload-module-2.0.tar.gz`是这个模块的源码包,解压后,你会得到源代码和其他构建所需的文件。编译和安装这个模块通常涉及以下步骤: 1. **解压源码**: 首先,使用`tar -zxvf nginx-upload-module-2.0....
赠送jar包:jackson-module-scala_2.11-2.6.7.1.jar; 赠送原API文档:jackson-module-scala_2.11-2.6.7.1-javadoc.jar; 赠送源代码:jackson-module-scala_2.11-2.6.7.1-sources.jar; 赠送Maven依赖信息文件:...
赠送jar包:jackson-module-scala_2.12-2.6.7.1.jar; 赠送原API文档:jackson-module-scala_2.12-2.6.7.1-javadoc.jar; 赠送源代码:jackson-module-scala_2.12-2.6.7.1-sources.jar; 赠送Maven依赖信息文件:...
总之,"lua-nginx-module-master.zip"包含的lua-nginx-module是将Lua语言的强大功能引入Nginx的关键,它为开发人员提供了一种灵活且高效的方式,以应对复杂的Web服务场景。正确理解和使用这个模块,可以显著提升...