现在说说Module,这篇教程代码不是最重要的,怎么样合理的使用Module以及注意的问题才是关键,所以建议大家注意下面红色语句。Module,可以将我们的项目按需划分为N个模块,在编译时将项目编译为主文件以及N个module的swf。Module基本上可以分为两种:
Module可以做什么呢?我主要将Module用于以下下两种情况
现在讲正题,在demo中我这样表现Module的使用。(为了体现Module的意义,主程序生成的大小是原始flex大小248K, module内嵌了两张图片是674K)
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 了,睡了。 |