flex开发技巧_V0.1

上传人:飞*** 文档编号:7204487 上传时间:2017-09-18 格式:DOC 页数:29 大小:278.50KB
返回 下载 相关 举报
flex开发技巧_V0.1_第1页
第1页 / 共29页
flex开发技巧_V0.1_第2页
第2页 / 共29页
flex开发技巧_V0.1_第3页
第3页 / 共29页
flex开发技巧_V0.1_第4页
第4页 / 共29页
flex开发技巧_V0.1_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《flex开发技巧_V0.1》由会员分享,可在线阅读,更多相关《flex开发技巧_V0.1(29页珍藏版)》请在金锄头文库上搜索。

1、1Flex 开发技巧版本号:0.1制定日期:2008-10-18编制 夏辉 日期 2008-10-18审核 日期批准 日期2目录1 Flex 优化 .32 页面跳转 .32.1 Flex 页面之间的参数传递 .32 基于 Cairngorm 框架的设计 .42.1 需求描述 .43 Cairngorm 框架解析 .531 Flex 优化Flex 的帮助手册中,有一个专门的章节讲了程序的优化,下面是我结合帮助作的几点小结:1、避免容器的多级嵌套,减少相对尺寸、相对定位的使用。在使用百分比来给容器内的元件定尺寸,一旦容器中的任何一个元件的位置和尺寸变化,都会引发容器对所有子级的重定位动作。如果嵌套

2、的级别很深,这个计算量会很大。2、尽量使用轻量级的容器Canvas 是体积最小的容器,它只支持绝对定位。很多时候,都可以使用它来代替 HBOx 和 VBox。另外,Canvas 也是我们编写自定义容器性质组件的一个首选。它具有容器的基本功能,利于扩展。3、避免使用大体积的组件,比如 DataGrid、AdvancedDataGrid大个子组件的功能强大,但开销也是非常大的。由于功能的复杂性,使得皮肤、样式、itemRenderer 的实现都格外复杂。4、处理数据时多用分页的方式在使用数据类型控件时,尽量减少数据一次的显示量。比如 TileList,它会把数据一次性全部创建,不管是不是需要显示,

3、这样很浪费资源。 ViewStack 、TabNavigator 等在处理元件时,并不是一次创建,只要元件在第一次被显示时才创建,这样,就避免的不必要的开销。5、setStyle 和 styleNameFlex 组件的皮肤都是可视化元件,组件在自身初始化时,会使用当前的样式比如 styleName 完成所有皮肤元件的绘制。如果我们在运行期间通过 setStyle 修改了组件的样式,组件的尺寸、位置就会作相应调整。联系到第一条,如果组件位于一个层级很深的容器中,也会有一个大的计算量。2 Flex 常见错误 2.1 Cannot create HTML wrapper. Right-click h

4、ere to recreate folder html-template.点击项目-属性-Flex compiler ,取消”Generate html wrapper file”即可。42.2 BlazeDS 项目用自带的 Tomcat 启动时报 “FileNotFoundException: targetactivemq-test.log”进行 tomcat 的 libactivemq4.1.1,从中去除 activemq-core-4.1.1-tests.jar,再启动,就不报错了顺便删除项目中 lib 目录下的 servlet-api.jar,否则提示该 jar 无法加载53 模块化如

5、果做一个很大的 Flex 程序,比如程序文件有 2,3M,一次性下载的话,就算是我的10M 宽带也是需要一段时间。更别提普通的 ADSL 了。另外如果同时 实例化太多的 Flex 控件,要占用很大的内存,浏览器(Flash Plugin)处理的时候会很慢,同时也会占很多的CPU 资源。因此,我们必须通过模块化技术来解决此类问题。模块(Module)是以代替作为根标签的 MXML 文件(或ActionScript 文件) 。你可以将带有标签的作为一个程序来看,但是它不能运行。代码演示项目名称 ModuleApp.zip3.1 mx:ModuleLoader 方式调用 ModuleModuleLo

6、ader 组件常用属性、方法和事件名称 分类 说明url 属性 要加载的外部 MXML module 的 urlmoduleLoader 方法 构造函数,没有参数loadModule 方法 加载外部的 mxml module,无返回值unloadModule 方法 卸载外部的 mxml moduleerror 事件 捕获抛出错误的事件loading 事件 ModuleLoader 开始加载外部文件时触发的事件ready 事件 ModuleLoader 完成加载外部文件时触发的事件setup 事件 加载开始并且可以提供模块信息,但没有加载完成时触发的事件unload 事件 卸载模块时触发的事件u

7、rlChanged 事件 当 url 发生改变时触发的事件progress 事件 跟踪模块实例加载的进度信息调用过程1、将组件 mx:ModuleLoader 拖到界面上,代码如下:2、如果需要加载外部 mxml 文件,代码如下:private function useModuleLoader(event:Event):voidif(ml.url = null)ml.url=UserList.swf ml.loadModule();63、组件 mx:ModuleLoade 的错误处理详见 ErrorApp.mxml4、显示组件 mx:ModuleLoade 的加载过程详见 ProgressAp

8、p.mxml详见 ModuleApp1.zip3.2 ModuleManager 方式调用 ModuleModuleManager 方式比 ModuleLoader 方便编码复杂一些,但是更加灵活。调用过程:1、通过 ModuleManager 实例的 getModule()方法拿到 Module 模块的一个索引,索引类型为IModuleInfo。2、调用这个索引的 load()方法。3、利用这个接口的 factory 属性拿到它相关连的 Module 工厂,调用此工厂的 create()方法,并将返回值强制转换成当前的 Module 类型。代码如下:详见 ModuleApp1.zip3.3

9、模块之间的数据通信Module 模块是一个容器,每个独立的模块对象都相当于一个自定义组件。有以下几种方式可以实现模块-模块、模块-主应用、主应用-模块、模块-一般自定义组件间的数据传输和通信。71. 利用 ModuleLoader 的 child、ModuleManager 的 factory、以及 Application 的parentApplication 属性存取 Module 模块和主应用文件对象索引。2. 因为 Module 模块在 ModuleLoader 中通常用 url 属性来指定,所以我们可以通过在 url上面拼 GET 参数,然后在 Module 模块中解析这些拼上去的参数

10、的方式来传输数据。3. 通过 ActionScript 接口方式。你可以定义一个 ActionScript 接口,这个接口定义了一系列方法和属性。Module 模块和主应用 Application 都可以访问这些属性。从而实现数据共享。3.3.1 在 Application 中访问 Module 模块对象在application 对象中代码如下private function getTitle():void s = (m1.child as ChildModule1).getModTitle();在 module 模块中代码如下:public function getModTitle():St

11、ring return Child Module 1;详见 AppToModule.mxml通过这种方式得到子 Module 模块的索引导致了主应用 Application 和 Module 模块之间的紧耦合,不利于模块逻辑的重用。同样地,利用 ModuleManager 的 factory 属性也可以拿到当前 ModuleLoader 的子模块对象的索引。在 module 模块中代码如下:public function computeAnswer(a:Number, b:Number):Number return a + b;详见 SimpleModule.mxml在application

12、对象中代码如下public var assetModule:IModuleInfo;public var sm:Object;public function initApp():void / Get the IModuleInfo interface for the specified URL.assetModule = ModuleManager.getModule(SimpleModule.swf);assetModule.addEventListener(ready, getModuleInstance);assetModule.load();public function getMod

13、uleInstance(e:Event):void / Get an instance of the module.8sm = assetModule.factory.create() as SimpleModule;public function addNumbers():void answer = puteAnswer(a, b);详见 SimpleMXMLApp.mxml3.3.2 在 Module 模块对象中存取主应用 Application1、通过 parentApplication 属性获取 application 对象的属性和函数Module 模块可以通过其 parentApplication 属性拿到主应用 Application 对象的索引,通过这个索引可以访问主应用对象的公共方法和属性。这种方式使得 application 模块与 module 模块耦合过大,可移植性大大降低。在 module 模块中代码如下:private var expenses:ArrayCollection;/ Access properties of the parent application.private function getDataFromParent():void expenses = pa

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号