如果一个Flex应用程序很复杂,建立单一的SWF文件会导致该文件相当大,这种情况对于Web应用来说是噩梦,所以如果我们分模块来下载,这样的话,我们需要什么内容就加载什么内容,减轻客户端的体积。下面我们来用Flex模块设计来设计Flex程序,-----ModuleManager。

第一步、新建项目

文件——>新建——>Flex项目,命名为“ModManager ”。

每二步、新建ModuleA,ModuleB两个简单的模块。

ModuleA代码清单如下:

<?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="252" height="208">
 <fx:Declarations>
  <!-- 将非可视元素(例如服务、值对象)放在此处 -->
 </fx:Declarations> 
 <s:Panel x="2" y="2" id="pan" title="我是第一个ModuleA" width="250" height="200">
  <s:Label text="我是第一个ModuleA" x="77" y="62"/>
   </s:Panel>
</mx:Module>

ModuleB代码清单如下:

<?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="266" height="220">
 <fx:Declarations>
  <!-- 将非可视元素(例如服务、值对象)放在此处 -->
 </fx:Declarations>
 <s:Panel x="6" y="10" id="pan" title="我是第二个ModuleB" width="250" height="200">
  <s:Label text="我是第一个ModuleB" x="77" y="62"/>
 </s:Panel>
</mx:Module>

第三步、编写主应用程序代码。

主应用程序ModManager.mxml代码清单如下:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" 
      xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
 <s:layout>
  <s:BasicLayout/>
 </s:layout>
 <fx:Declarations>
  <!-- 将非可视元素(例如服务、值对象)放在此处 -->
 </fx:Declarations>
 <fx:Style>
  @namespace s "library://ns.adobe.com/flex/spark";
  @namespace mx "library://ns.adobe.com/flex/mx";
  s|Application{ font-size:12pt;}
 </fx:Style>
 
 <fx:Script>
  <![CDATA[
     
     //使用模块前必须引入相应的类
      import modules.ModuleA;
      import modules.ModuleB;
      
      import mx.events.ModuleEvent;
      import mx.modules.IModuleInfo;
      import mx.modules.ModuleManager; 
   
   private var moduleInfo:IModuleInfo;
   private var moduleName:String;
   
   //根据ti的内容加载不同的模块
   private function loadModule():void{
   
    switch(ti.text)
    {
     case "ma": moduleName="ModuleA";break;
     case "mb": moduleName="ModuleB";break;
     default: moduleName="";return;break;    
    }

//添加侦听事件
    moduleInfo=ModuleManager.getModule("modules\\"+moduleName+".swf");
    moduleInfo.addEventListener(ModuleEvent.ERROR,omModuleError);
    moduleInfo.addEventListener(ModuleEvent.PROGRESS,onModuleProgress);
    moduleInfo.addEventListener(ModuleEvent.READY,onModuleReady);
    moduleInfo.addEventListener(ModuleEvent.SETUP,onModuleSetup);
    moduleInfo.addEventListener(ModuleEvent.UNLOAD,onModuleUnload);
   
    //加载模块
    moduleInfo.load();
   }
   
   //当模块加载出错时调用
   private function omModuleError(e:ModuleEvent):void{
   writeLog(moduleName+"发生错误");
     }

//当模块加载进行时被调用
   private function onModuleProgress(e:ModuleEvent):void{   
    writeLog(moduleName+"处理中,已经加载"+e.bytesLoaded+"+"+e.bytesTotal);
     }
   
   //当模块加载完成时被调用
   private function onModuleReady(e:ModuleEvent):void{   
    writeLog(moduleName+"完成准备");   
   }

//当加载完成的模块被添加到应用中时调用
   private function onModuleSetup(e:ModuleEvent):void{   
    writeLog(moduleName+"安装");

switch(moduleName)
    {
      case "ModuleA":
       var ma:ModuleA=  moduleInfo.factory.create() as ModuleA;
       ma.width=400;
       ma.height=300;
       vbx.addElement(ma);
       break;
      case "ModuleB":vbx.addElement(moduleInfo.factory.create() as ModuleB);
       break;   
    } 
   }
   
   //当模块卸载是被调用
   private function onModuleUnload(e:ModuleEvent):void{ 
    writeLog(moduleName+"卸载");    
   }
   
   //卸载模块
   private function unloadModule():void{ 
    vbx.removeAllElements();
    moduleInfo.unload();  
   }
   
   private function writeLog(s:String):void{
   
    ta.text+=s+"\n";
    callLater(setScroll);
   
   }
   
   private function setScroll():void{
   
   ta.verticalCenter=ta.maxWidth;
   }
   
  ]]>
 </fx:Script>

<s:HGroup id="hbx" width="100%" height="100%">
  <s:VGroup width="300">
   <s:HGroup width="100%">
    <s:TextInput id="ti" width="50" text="ma"/>
    <s:Button id="btnLoad" label="加载" click="loadModule()"/>
    <s:Button id="btnUnload" label="卸载" click="unloadModule()"/>
   </s:HGroup>
   <s:TextArea id="ta" width="100%" height="500"/>
  </s:VGroup>
  <s:VGroup id="vbx" width="535" height="527"/>
 </s:HGroup>
</s:Application>

Flex模块管理器,ModuleManager相关推荐

  1. 【Java】我的世界Java版外挂制作 [1] - 模块管理器与第一个模块

    ROOT: 挂端主文件夹 1x001 创建主包和主类 在ROOT/src/minecraft下创建新包,名字叫me.hack.hackedclient.如果没有创建包的选项,就右键ROOT/src/m ...

  2. 前端模块管理器命令:npm bower

    npm bower 转载于:https://www.cnblogs.com/ixiaohao/p/5246040.html

  3. 模块管理 Guice

    [使用Guice] es每个模块都是通过 Service(实现业务功能) 和 Module(配置绑定信息) 类共同实现模块功能,以 CLusterModule 为例: Module    ->  ...

  4. unity网络实战开发(丛林战争)-正式开发阶段(018-声音管理器模块的完善)

    使用工具:VS2017,unity3d 使用语言:c# 作者:Gemini_xujian 参考:siki老师-<丛林战争>视频教程 上一篇文章中,已经完成了注册事件的处理,接下来将完善声音 ...

  5. Nginx运行FastCGI程序(ngx_http_fastcgi_module模块、fcgi库、spwan-fcgi进程管理器)

    一.什么是CGI 通用网关接口(Common Gateway Interface.CGI)描述了客户端和服务器程序之间传输数据的一种标准,可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数 ...

  6. 启动vs项目时,无法启动IIS管理器,找不到xxx模块

    启动vs项目时,无法启动IIS管理器,找不到xxx模块 解决办法: 首先 看一下IIS管理器在电脑上是否启动 控制面板-->程序-->启动或关闭windows功能 将以下功能都勾选上,点击 ...

  7. 在Yaf中使用Zf2的配置和服务管理器

    测试最新的ZF2.3框架,发现zf2性能比预想的低太多, 在笔记本上每秒竟然只能响应30个请求. 测试条件: I3 380M + 4G + Windows7 + iis7 + PHP5.4(fastc ...

  8. 码农技术炒股之路——配置管理器、日志管理器

    配置管理器和日志管理器是项目中最为独立的模块.我们可以很方便将其剥离出来供其他Python工程使用.文件的重点将是介绍Python单例和logging模块的使用.(转载请指明出于breaksoftwa ...

  9. 安装npm_前端开发:node.js的node包管理器npm安装以及使用

    在前端开发过程中,node.js进行包管理的时候会使用npm管理器来操作.npm(node package manager)包管理器,主要是用于第三方模块的下载.安装和管理,它具有强大的第三方资源,重 ...

最新文章

  1. AI 如何推进全球可持续发展?
  2. Windows 任务管理器进程详解
  3. Win 10 UWP开发系列:设置AppBarButton的图标
  4. shell高级(一)
  5. 【Apache】 LXC 容器中重启 Apache 报错: Failed to set up mount namespacing: Permission denied
  6. ES6的字符串与正则表达式
  7. java kotlin lateinit_kotlin - 如何检查“lateinit”变量是否已初始化?
  8. innobackupex远程备份脚本
  9. python常用正则表达式_Python3常用正则表达式
  10. python使用hash256加密验证字符串
  11. 小鹏、蔚来相继车祸,自动驾驶四字不等于“全自动”,也分等级!
  12. mysql数据库版本常用_推荐:经典版本常用MySQL的命令集锦_MySQL
  13. Tableau可视化学习笔记:day09-10
  14. 2019年的读书印记
  15. html学生项目总结反思,小学月考总结与反思(精选10篇)
  16. 电脑如何使用硕鼠批量下载哔哩哔哩视频
  17. 德银天下招股书再度“失效”,陕汽控股集团提前“套现”约5亿元
  18. 上课笔记、HTML简介
  19. 基于时域表示的序列数据分类方法(一)——基于距离度量的序列数据分类方法
  20. 计算机语言替换,Zig 0.7.0 发布,想要替换 C的编程语言

热门文章

  1. mtk NVRAM研究系列
  2. mysql主服务器ip_master主服务器:ip:192.168.5.112  sudo vi /etc/mysql/my.cnf[mysqld]server-id=1log-bin...
  3. 如何升级cpolar内网穿透的套餐服务级别
  4. html 文本框赋值日期代码,如何获取到input输入框 中date的当前日期
  5. layui 分页问题
  6. 汉字部首Unicode对照表
  7. git 对比两个commit 之间的差异
  8. 从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器
  9. manjora上好玩的游戏_manjaro安装教程
  10. ssh登陆去掉yes/no询问