Adobe Flex迷你教程 -- 合理使用Module分割项目以及对Module的使用

news/2024/7/7 21:44:45
现在说说Module,这篇教程代码不是最重要的,怎么样合理的使用Module以及注意的问题才是关键,所以建议大家注意下面红色语句。Module,可以将我们的项目按需划分为N个模块,在编译时将项目编译为主文件以及N个module的swf。Module基本上可以分为两种:


完整的Module,可以被外部app所使用 -- 会将所有涉及到的引用编译到module中,主文件的体积得到缩减,但是Module本身的体积可能会很大,比如Module和主程序都应用了对象C,那对象C会被编译到主程序以及Module中,这样Module的体积就会很大。


关联到主程序的Module -- 比如Module和主程序都应用了对象C,那对象C会只编译在主程序中,从而减小Module的体积。我今天主要讲这一种Module,也是我们最常用到的。
了解了Module的种类,再简单说说使用Module要注意的地方。


绝对不能在Module以外的地方直接引用Module中的对象。这样Module会被编译到引用它的模块中去,如果从主程序中引用,那么Module就实际上没有效果了。


既然不能引用,那么建议对Module对象的使用用接口实现。在Module中实现接口方法,在外部使用这个接口不会导致Module被误编译。


Module可以引用主程序中的东西,但是不要引用其他Module中的东西。

Module可以做什么呢?我主要将Module用于以下下两种情况


缩减主程序的体积,点击Module功能块时加载Module.
再入主程序后在用户感觉不到的情况下预加载剩下的Module.


现在讲正题,在demo中我这样表现Module的使用。(为了体现Module的意义,主程序生成的大小是原始flex大小248K, module内嵌了两张图片是674K)


如何创建Module.
主程序中点击按钮加载Module PictureWindow.
加载完毕后将模块添加到Box中,并通过接口调用PictureWindow中的方法setSelectIndex()设置显示的图片。

1. 如何创建Module.

可以通过New --> MXML Module -->Optmize for applicaiton --> OK 或者修改任意的已经创建好的Container组建(比如Canvas, panel)标签为Module,再或者继承Module的As class。

之后确保“鼠标右键项目”--> Property --> Flex Module 中有这个Module,没有的话点Add --> 选择Module的mxml或as文件 -->Optmize for applicaiton -- > OK

2. 主程序中点击按钮加载模块PictureWindow.

这里我使用了ModuleManager来动态加载需要的Module。这比ModuleLoder要灵活的多。

private function loadModule():void{
m = ModuleManager.getModule("PictureWindow.swf"); //设置Module地址,地址是编译后swf在bin中的位置
//设置事件监听
m.addEventListener(ModuleEvent.READY,loadReady);
m.addEventListener(ModuleEvent.PROGRESS,loadReady);
m.addEventListener(ModuleEvent.ERROR,loadError);
m.load(); //加载Module
}


3. 加载完毕后将模块添加到Box中,并通过接口调用PictureWindow中的方法setSelectIndex()设置显示的图片。

PictureWindow实现了PictureWindowInterface接口,其中暴露了setSelectIndex方法。再次强调不要直接使用Module对象,如果我们不注意写成
var window:PictureWindow = e.module.factory.create() as PictureWindow,那整个Module就前功尽弃了

//Module加载完成
private function loadReady(e:ModuleEvent):void{
//将Module对象转换为PictureWindowInterface
var window:PictureWindowInterface = e.module.factory.create() as PictureWindowInterface
this.box.addChild(window as DisplayObject);
window.setSelectIndex(1); //通过Interface调用Module中的方法
}


好了,Module的使用就写这么多,看到这里你应该也可以创建自己的Module了,对于ModuleManager和IModuleInfo 中详细的内容,大家可以查阅Flex帮助。

12:00 了,睡了。

http://www.niftyadmin.cn/n/4036203.html

相关文章

HDU 4883 TIANKENG’s restaurant (贪心)

链接&#xff1a;带我学习。带我飞 第一次BC&#xff0c;稳挂&#xff0c;WA n多次。今天又一次做了一下 略挫#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <map> #include <string> #include …

BZOJ 1570: [JSOI2008]Blue Mary的旅行( 二分答案 + 最大流 )

二分答案, 然后对于答案m, 把地点分成m层, 对于边(u, v), 第x层的u -> 第x1层的v 连边. 然后第x层的u -> 第x1层的u连边(oo), S->第一层的1(PEOPLE_NUMBER), 每一层N -> T(oo), 假如最大流是等于人数&#xff0c;就是可行答案. ----------------------------------…

受邀Quora,试水麻球

受Quora邀请了&#xff01;有的加我

通过SSH连接N900

N900采用的maemo是基于debian的linux系统&#xff0c;通过自带的application manager管理软件时&#xff0c;操作体验还有待改进&#xff0c;所以这里推荐通过SSH连接&#xff0c;使用cli来进行相应操作。 需要在手机端安装OpenSSH来开启SSH服务&#xff0c;在application mana…

PureMVC总结(附Hello World含PureMVC源码代码和文档)

PureMVC总的流程是&#xff1a; Faade通过一个STARTUP的Command来进行Proxy和Mediator的注册&#xff0c;初始化&#xff08;这样Proxy和Mediator就可以接受Notification消息&#xff09;。 Command通过Faade中注册的对应Notification触发。 Proxy只发送Notification&#xff0…

函数的参数设置

函数的参数设置 默认参数 def power(x, n2):s 1while n > 0:n n - 1s s * xreturn s有几点要注意&#xff1a; 一是必选参数在前&#xff0c;默认参数在后&#xff0c;否则Python的解释器会报错&#xff08;思考一下为什么默认参数不能放在必选参数前面&#xff09;&…

Flash ActionScript (15) as2.0与as3.0区别

学习AS3.0已有一段时间了&#xff0c;想把自已对AS3的一些认识和大家分享一下。主要想说说AS3与AS2的不同之处&#xff0c;没有什么逻辑性&#xff0c;想到什么就写点什么&#xff0c;因此&#xff0c;它不适合AS高手们阅读。本文将力求用最直白的语言&#xff0c;尽量不用那些…

5G时代的材料新宠——液晶高分子聚合物

液晶高分子聚合物时80年代初期发展起来的一种新型高性能工程塑料&#xff0c;英文名为&#xff1a;Liquid Crystal Polymer 简称为LCP。 聚合方法以熔融缩聚为主&#xff0c;全芳香族LCP多辅以固相缩聚以制得高分子量产品。非全芳香族LCP常采用一步或二步熔融聚合制取产品。近年…