`

flex Module

    博客分类:
  • Flex
阅读更多
Modules技术
       flex的Modules技术是可以被flex程序使用的一个swf文件,它不能脱离程序独立运行,但是多个程序之间可以共享它。flex的 Modules技术将应用程序分割成小块、模块,主程序动态的加载所需要的模块。主程序在启动时并不全部加载所有的模块。当用户和模块没有交互的时候它不 需要加载模块,同时它在模块不需要的时候可以卸载模块并释放内存和资源。Module和RSLs(运行时共享库)很相似,他们独立分离代码将应用程序分成 独立的加载的swf文件。但它比RSLs更加灵活,因为它可以在运行时动态加载/卸载并且不依赖于应用程序编译。
       Module是一个特殊的可以动态加载的包含IFlexModuleFactory类工厂的swf文件。它允许应用程序在运行时加载代码并在不需要主程序 相关连类实现的情况下创建类的实例。Module组件是继承于LayoutContainer,其实是一个flex容器,如果您的模块不包含任何flex 框架代码,则可以创建扩展 ModuleBase 类的类。与创建基于 Module 类的模块相比,如果您使用 ModuleBase 类,则通常情况下您的模块要小一些,因为它没有任何flex框架类依赖项。
       ModuleManager 负责管理加载了的modules集合,将之对待为按照module URL为索引的单例map。加载module会触发一系列的事件来让客户端监控module的状态。module只加载一次,但是会重载并分发事件,因此 客户端代码可以简单的依赖 READY 事件来获取module的类工厂来使用它。
        ModuleLoader 组件的行为方式与 SWFLoader 极为相似,不同的是它需要遵循与加载内容间的合同要求。本合同规定子级 SWF 文件实现 IFlexModuleFactory,并且可以按需使用实现的 factory 创建子类的多个实例。
 
Modules的优点:
    让swf文件初始下载尺寸更小
   让加载时间更短
    对应用程序更好的封装性。
 
应用Module步骤:
1 创建任意数量的modules。基于MXML文件的根节点是<mx:Module>。基于AS的扩展Module或者ModuleBase类。
2 编译module,方式如同应用程序的编译。可以使用基于命令行的mxmlc或者集成于flexbuilder中的编译器。
3 创建一个应用程序类。
4 在应用程序文件中使用<mx:ModuleLoader>来加载modules。或者你也可以使用mx.modules.ModuleLoader和mx.modules.ModuleManager类的方法来加载。

Module的加载
方法1:     
<mx:ModuleLoader url="ModuleA.swf"/>
方法2:
public var info:IModuleInfo;     
private function initApp():void {
  info = ModuleManager.getModule("ModuleA.swf");
  info.addEventListener(ModuleEvent.READY, modEventHandler);          
  info.load();
}    
private function modEventHandler(e:ModuleEvent):void
    var moduleA:ModuleA = info.factory.create() as ModuleA;
}
 默 认下,一个module会被加载进当前应用程序domain的子domain。你可以通过使用ModuleLoader的 applicationDomain的属性来指定不同的应用程序domain。 因为module被加载到子domain中,因此它拥有的类将不属于主应用程序的domain中。举例:当一个module加载了 PopUpManager类,那么在整个应用程序中它就变成了PopUpManager类的Owner,因为它注册到SingletonManager 中。加入另外一个module晚些试图使用PopUpManager,
Adobe ® Flash® Player 将会抛错。解决方法是确保如PopUpManager、DragManager这些managers和一些共享服务都定义在主应用程序中(或者晚加载入应 用程序domain中)。这样这些类可以被所有的module使用。典型的,都是通过将他们添加到脚本块中:   import mx.managers.PopUpManager;  private var popUpManager:PopUpManager; 
这项技术同时也应用到components,当module第一次使用component时,将在它自己的domain中拥有这 component的类定义。作为结果,如果别的module试图使用这些已经被另一个module使用的component,它的定义将会不能匹配到现 存的定义中。因此,为了避免component的定义不匹配,在主应用程序中创建component的实例,让所有的module去引用。
        当你第一次开启应用程序来使用module,此应用程序将会比不使用module的应用程序尺寸更小。同时它也会减小等待时 间。但同时,它将会在你访问以前非module的地方增加延迟。这是因为它不是预加载的。他们在第一次请求的时候被加载。 当module第一次被加载时,module的swf文件通过网络传输并储存到浏览器的缓存中。当它被卸载后又被加载时,等待时间会稍短,这是因为 Flash Player将在客户端浏览器缓存中加它,而非网络。 Module的swf文件和其他所有的swf文件一样,存在于客户端缓存一直到用户清空他们。因此module可以被主应用程序跨不同的session访 问,减少加载时间,但着也依赖于浏览器的缓存清空频率。你可以预加载
module到内存即使当它目前并没有被用到的时候。使用IModuleInfo类的load方法在应用程序启动时可以预加载module。它将module加载到内存,但是并没有创建其实例。 
 
Module的安全
因为module必须和应用程序再同一个security domain中,当你在AIR应用程序中使用任何的module SWF文件时,必须和主应用在相同的目录或者在其子目录中,确保他们在相同的security沙盒中。一个确保的方法是使用URL引用module位置不 要包含“../”。在不同的服务器中加载module在不同的服务器中加载module,必须在其彼此间建立信任。跨域访问应用程序加载应用程序时必须调 用allowDomain()方法并且指定你需要加载的module所在的目标domain。因此在应用程序预初始话事件处理时指定目标域来确保程序在 module加载前启动。在module所在的远程服务的cross-domain文件,增加一个entry来指定加载应用程序的服务位置。在你自己加载 的应用程序中preinitialize事件处理器中加载远程cross-domain文件。在被加载的module调用allowDomain方法来和 调用者通讯。
 
Module 通信
1. 通过查询字串方式传入
        var url:String = "QueryStringModule.swf?firstName=" + "张三";
         loadModule(url);
在模块中可以从loderInfo中得到传入的参数:var s:String = this.loaderInfo.url.toString();
 
2. Application和Module相互访问:
    在application中可以通过 ModuleLoader的child属性得到Module实例,然后访问Module的公开方法和属性,当然也可用ModuleManager.getModule()方法。
     如果是在Module中要访问Application中方法和属性(可以是私有的),用parentApplication属性
 
3 . module和module之间
        其实是通过Application 来传递,在module中的parent是ModuleLoader,而ModuleLoader的parent就是Application了,可以在 moduleA中引用Application派发一个事件,在moduleB中引用 Application来接收事件就能传递参数了。
      也可以借助parentApplication来引用别的module, 如:在ModuleB中要访问ModuleA,
       var modelA: ModuleA = parentApplication.m1.child as ModuleA;
 

4.  通过用接口方式,即让Module实现自定义的interface。

分享到:
评论
3 楼 mysecond 2011-11-19  
谢谢,讲的很详细,好好看看
2 楼 csdn_zuoqiang 2010-10-14  
1. application 通过 url 字串方式传入

              var s:String = "QueryStringModule.swf?firstName=" + ti1.text + "&lastName=" + ti2.text;

在 module 中:

<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="parseString()">

....
    public function parseString():void {
           try {
                // Remove everything before the question mark, including
                // the question mark.
             var myPattern:RegExp = /.*\?/;
                var s:String = this.loaderInfo.url.toString();
....

2. 通过定义事件类来传递参数

3. 通过 parentApplication 两个共生模块间进行通信

共生模块是指在一个 application 中同时加载两个模块

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:ns1="module.*">
<mx:Script>
<![CDATA[
]]>
</mx:Script>
<ns1:InterModule2 height="122" id="m2">
</ns1:InterModule2>
<ns1:InterModule1 id="m1" borderColor="#1492EA" cornerRadius="5">
</ns1:InterModule1>
</mx:Application>

在 m1 中定义方法 getNewTitle()

则 m2 可以调用 parentApplication.m1.getNewTitle();

4. 主模块向不同模块传入参数

通过 event 实现主模块与子模块, 子模块间参数传递, 参考这篇文章

各模块实现一个接口, 主模块调用模块接口的方法来传递参数

相关推荐

    FlexModule_j2ee Flex 与JSP 整合用的.jar 文件

    FlexModule_j2ee 是一个专为整合Flex与JSP应用设计的组件库,它提供了一个.jar文件,使得在Java服务器端(JSP)与客户端的Adobe Flex之间建立交互变得更加便捷。Flex是一种强大的富互联网应用程序(RIA)开发技术,...

    FlexModule_j2ee.zip

    FlexModule_j2ee.zip是一个压缩包,包含了将Flex前端技术集成到JSP(JavaServer Pages)和J2EE(Java 2 Platform, Enterprise Edition)后端环境中的示例工程。这个项目旨在展示如何在传统的Web应用中嵌入富互联网...

    FlexModule_j2ee Flex JAVA

    不要以为我要5分很高,这个绝对是官网资源,其中包含各位最一直在寻找却找不到即使找到也不好用的 flex-bootstrap-jsp.jar flex-bootstrap.jar flex-webtier-jsp.jar flex-webtier.jar

    Flex Module间通信

    首先,了解Flex模块(Module)。在Flex中,一个模块是一个可以独立编译和加载的SWF文件,它可以在运行时动态插入到主应用程序中。模块化设计使开发者能够将应用拆分为更小、更专注的功能单元,每个单元都可以单独...

    FlexModule_j2ee.part1

    the Flex 3 compiler module for J2EE application servers.

    flex module ppt

    【Flex Module PPT详解】 Flex Module 是Adobe Flex SDK中的一个重要特性,它允许开发者将大型应用程序分解为更小、更易管理的部分。通过模块化,我们可以创建独立的代码块,这些代码块可以在不同的应用程序中复用...

    Flex Module j2ee。lcds 2.6的webtire的继承包

    标签“Flex Module j2ee”强调了Flex模块在Java企业版(J2EE)环境中的使用。Flex模块在J2EE应用服务器上运行,可以利用后端服务,如数据库、Web服务等,为用户提供丰富的图形用户界面。在J2EE环境中,Flex模块通常...

    flex module实例

    Flex模块(Flex Module)是Adobe Flex框架中的一个重要概念,它允许开发者将大型应用程序分解为多个独立的、可重用的组件,这些组件被称为模块。在Flex应用中,模块可以按需加载,从而优化应用程序的启动时间和内存...

    Flex 基于Module模块的开发资料完整版

    Flex 基于 Module 模块的开发是一种有效的软件架构策略,它允许将大型应用程序分解为更小、更易于管理的单元,称为模块。模块化的主要目标是提高代码的可维护性、可扩展性和性能。 1. **模块化的定义与原理** - **...

    FlexModule_j2ee.part2.rar

    the Flex 3 compiler module for J2EE application servers.

    Flex批量管理Modules

    在Flex工程中添加Module的方法是:在FlashBuilder中右键工程目录-&gt;Porperties-&gt;Flex Modules, 然后就可以add/edit/remove需要的module了, 但问题 是无论添加多少module都要点击add按钮一个一个添加! 像我们的项目一...

    flex嵌入jsp心得

    开发者在个人文件中偶然发现了FlexModule_j2ee.zip,这是一个关键的资源包,包含了将Flex嵌入到JSP中的必要组件和文档。通过解压并阅读其中的readme.txt文件,开发者获取了初步的指导思路,了解到该模块能够简化Flex...

    flex一个动态添加卸载Module的例子

    这将卸载Module,释放其占用的资源,但请注意,这并不意味着Module的类将从内存中完全移除,因为Flex可能会缓存已加载的Module以提高性能。 3. **示例代码**: 在`main.mxml`中,可能包含一个按钮,点击后加载或...

    Adobe官方Flex3 Module模块设计经典资料(附源代码)

    在Flex3的Module模块程序设计中,在Google中进行了大量的资料查找,综合比较各个资源后,将我认为最有价值的资料放在这里(全英文的)。 下载包中包括: 1、Adobe Creating Mudule Application.pdf 2、相似例子的源...

    Flex入门学习文档

    注意,`FlexModule_j2ee.zip`实际上是一个war文件,需要重命名为zip并再次解压,以便获取其内部内容。 2. 将解压后的`flex`文件夹复制到你的Java Web工程的`WEB-INF`目录下,同时将`lib`目录中的`flex-bootstrap....

Global site tag (gtag.js) - Google Analytics