flex中比较少人使用相关的反射,主要原因是因为avm编译模式,没办法做到java般的灵活的反射,那么就比较容易失去工厂模式的灵活的特性,但是flex也有相关反射,主要是用户swc和swf的反射,可以直接在内部提取class使用。
1、元数据捆绑问题
相信很多朋友也遇到相关问题 [Embed(source="resource/image/config/canvasLoading .gif" , mimeType="application/octet-stream")] public var _loadingGif:Class; 如果一个项目中捆绑过多元数据就会造成swf体积过大,但是往往也要面对一个需求,就是无需修改主要的flex源代码就可以修改嵌入文件的需求,那么用swc嵌入文件,再用flex动态加载swc是最好的办法了。
2、动态加载模块的问题
某些项目在前端的flex有可能动态加载某些模块的源代码,这些可能动态加载的UI、utils或者一些skin,放在动态加载的swc中也是一个比较好的解决方案;
3、Licence的动态加载
这个是我最常用的地方。
相关的用途就不描述那么多,如果有需要的朋友就可以找到优点了:
动态加载swc package com.shine.framework.Swc { import flash.display.Loader; import flash.events.Event; import flash.events.IOErrorEvent; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; import flash.system.ApplicationDomain; import flash.system.LoaderContext; import flash.utils.ByteArray; import mx.controls.Alert; import mx.core.UIComponent; import nochump.util.zip.ZipEntry; import nochump.util.zip.ZipFile; public class SwcManager extends UIComponent { //swc的路径 public var swcUrl:String=""; //library swf路径 public var libraryUrl:String=""; //加载完成的方法 public var method:Function; public function SwcManager(value:String=null,completeMethod:Functi on=null) { super(); if(value!=null){ this.swcUrl=value; } if(completeMethod!=null){ this.method=completeMethod; } this.visible=false; } //加载swc public function loadSwc(value:String=null,completeMethod:Function= null):void{ if(value!=null){ this.swcUrl=value; } if(completeMethod!=null){ this.method=completeMethod; } if(this.swcUrl!=null){ var loader:URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE,swcLoaded); loader.addEventListener(IOErrorEvent.IO_ERROR,erro r); loader.dataFormat = URLLoaderDataFormat.BINARY; loader.load(new URLRequest(swcUrl)); }else{ Alert.show("不可以加载空的swc地址"); } } //加载swc完成 private function swcLoaded(e:Event):void { var byte:ByteArray = e.target.data; byte = swc2swf(byte); var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.CO MPLETE,libReady); loader.contentLoaderInfo.addEventListener(IOErrorE vent.IO_ERROR,swfError); loader.loadBytes(byte,new LoaderContext(false,ApplicationDomain.currentDomai n)); } private function error(e:Event):void{ Alert.show("加载"+this.swcUrl+"失败"); } private function swfError(e:Event):void{ Alert.show("加载"+this.swcUrl+"swf失败"); } //加载library 完成 private function libReady(e:Event):void { if(method!=null) method.call(this); } //解压 public function swc2swf(byte:ByteArray):ByteArray { var zipFile:ZipFile = new ZipFile(byte); var zipEntry:ZipEntry = null; if(libraryUrl!=null&&libraryUrl.length!=0) zipEntry = zipFile.getEntry(libraryUrl); else zipEntry = zipFile.getEntry("library.swf"); return zipFile.getInput(zipEntry); } } } 使用教程
首先动态加载swc var swcManage:SwcManager =new SwcManager; swcManage.loadSwc("framework.swc",loadComplete); 其次实例化object private function loadComplete():void{ var o:Object=ReferenceUtil.referenceClass("Licence.fil e::LicenceFile"); } 获取到swc中的实例就可以非常容易做相关的操作;
另外附上动态加载swf源代码 package com.shine.framework.Swf { import flash.display.Loader; import flash.events.Event; import flash.net.URLRequest; import mx.controls.Alert; import mx.core.UIComponent; public class SwfManager extends UIComponent { //swc的路径 public var swfUrl:String=""; //加载完成的方法 public var method:Function; public function SwfManager(value:String=null,completeMethod:Functi on=null) { super(); if(value!=null){ this.swfUrl=value; } if(completeMethod!=null){ this.method=completeMethod; } } //加载swf public function loadSwf(value:String=null,completeMethod:Function= null):void{ if(value!=null){ this.swfUrl=value; } if(completeMethod!=null){ this.method=completeMethod; } if(this.swfUrl!=null){ var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.CO MPLETE ,swfLoaded); loader.load(new URLRequest(this.swfUrl)); }else{ Alert.show("不可以加载空的swc地址"); } } //加载swc完成 private function swfLoaded(e:Event):void { if(method!=null) method.call(this); } } }
发表评论
-
c语言中的字符数组与字符串
2012-07-06 09:51 8811、字符数组的定义 ... -
打造自己的正则表达式助手程序
2012-07-06 09:45 699原文地址:http://ire ... -
正则表达式
2012-07-06 09:37 756正则表达式 字 ... -
swing look and feel demo
2012-07-06 09:30 649more information : http://cid ... -
一个简单的仿sohu电视剧播放列表[脚本]
2012-07-05 20:45 619实例下载地址:http://download.csdn.n ... -
基于COM的轻量级组件技术的简单实现
2012-07-03 13:43 8410 引言 在软件开 ... -
PHP作为Flex程序的数据源
2012-07-02 10:28 567Adobe Flash Builder 4 简体中文正式版 ... -
Flex 遍历组件的实现
2012-07-02 10:28 754Flex有两个阵营组件:spark组件和mx组件,关于sp ... -
Flex + BlazeDS 学习笔记 (一) --- BlazeDS的功能原理及配置实例
2012-07-02 10:27 546BlazeDS Test Drive里面示例了主要的功能: ... -
java与flex通信
2012-07-02 10:27 658一、准备: 服务端:JDK1.5 (这个不用介绍了吧 ... -
Flex Image加载Servlet图像流处理
2012-07-01 00:04 420Image控件是Flex加载、显示图像的一个控件,当然其也 ... -
Flex初始化时加载外部XML
2012-07-01 00:04 696Flex初始化时加载外部XML配置文件 Flex项目 ... -
视频聊天网站的研究、发展以及趋势(转)
2012-07-01 00:03 508此文讲述了视频聊 ... -
视频聊天网站的研究、发展以及趋势(转) ...
2012-07-01 00:03 555此文讲述了视频文件聊天网站相干的技术、发展过程和将来的发展 ...
相关推荐
4. 在“Flex Build Path”选项中,可以配置所需的库(如SWC文件)。 5. 完成配置后,点击“Finish”创建项目。 五、编写Flex代码 1. 在新建的Flex项目中,右键点击“src”目录,选择“New” -> “ActionScript ...
这个jar包的核心功能是初始化Flex的SWF加载器,它负责在浏览器中加载Flex应用程序的SWF文件,并且处理与服务器的AMF(Action Message Format)通信,这是一种高效的数据交换协议,用于在Flex客户端和Java服务器之间...
1. **SWC 文件**:SWC 文件是编译后的 Flex 组件库,可以通过 `library-path` 和 `include-libraries` 属性添加到项目中。 2. **优化Flex应用程序大小**:除了使用RSL之外,还可以通过模块化设计(Module)和优化资源...
在Flex中,开发者可以通过一系列预定义的组件来设计和构建应用程序的界面,然后通过ActionScript 3.0添加动态功能,实现数据绑定和事件驱动的编程。 1. **Flex框架**:Flex框架包含了创建RIA所需的所有组件和容器,...
在Flash ActionScript3游戏开发中,将FLA中的资源嵌入到Flex或纯AS3项目是常见的需求。这些资源可能包括位图、字体、声音、动画等,它们是游戏视觉效果和交互体验的重要组成部分。本篇文章将详细讲解五种不同的嵌入...
通常,需要将flexTasks.jar添加到Ant的classpath中,这样Ant才能识别和执行Flex相关的任务。 在"bin"目录下,可能包含了Ant运行时需要的一些可执行文件或库,例如Java编译器和其他辅助工具。在构建脚本中,可能通过...
3.4 节在容器中动态添加和移除子组件 3.5 节对容器使用基于约束的布局 3.6 节在容器内为子组件设置最大、最小尺寸 3.7 节为容器指定行和列的约束 3.8 节使用约束条件为文本创建排版流程(Layout Flows) 3.9 节在容器...
`Embed`元数据标签用于嵌入资源(如图片或SWF文件)到SWC或SWF文件中。例如: ```as3 [Embed(source="testIcon.gif")] public var testIcon:Class ``` 在MXML中使用嵌入的资源: ```xml ``` 这使得可以在代码中...
SWC文件中包含了两个主要的文件:catalog.xml和library.swf。catalog.xml文件列出了库的所有组件和它们的元数据。而library.swf包含了实际的ActionScript字节码。 在catalog.xml中,自定义命名空间的信息会被记录为...
- 可以在导入的SWC文件中查看包含的类和元件。 综上所述,《FlashDevelop学习教程》涵盖了从安装配置、项目创建到资源加载等多个方面的内容。对于初学者来说,这份教程提供了从零开始学习FlashDevelop所需的全部...
这些组件都包含在Flex SDK和rpc.swc组件库中。通常情况下,Flex应用程序会使用BlazeDS作为中间层来调用远程服务,但这并非强制性的。开发人员也可以选择直接使用HTTPService或WebService来调用远程服务。 ##### 2.0...
- **引入A3D类库**:将A3D的SWC类库导入项目中,以便使用其提供的3D功能。 #### 三、代码解析 本节将详细介绍代码中的关键部分及其作用。 ##### 1. 导入必要类库 ```as import alternativa.engine3d.controllers....