`
hgfghe4
  • 浏览: 62318 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Flex动态加载swc和swf中的class

 
阅读更多

  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); } } }
分享到:
评论

相关推荐

    MyEclipse Flex环境配置详解

    4. 在“Flex Build Path”选项中,可以配置所需的库(如SWC文件)。 5. 完成配置后,点击“Finish”创建项目。 五、编写Flex代码 1. 在新建的Flex项目中,右键点击“src”目录,选择“New” -> “ActionScript ...

    Flex-jsp两个必要jar包

    这个jar包的核心功能是初始化Flex的SWF加载器,它负责在浏览器中加载Flex应用程序的SWF文件,并且处理与服务器的AMF(Action Message Format)通信,这是一种高效的数据交换协议,用于在Flex客户端和Java服务器之间...

    FLEX面试题

    1. **SWC 文件**:SWC 文件是编译后的 Flex 组件库,可以通过 `library-path` 和 `include-libraries` 属性添加到项目中。 2. **优化Flex应用程序大小**:除了使用RSL之外,还可以通过模块化设计(Module)和优化资源...

    Flex 是如何工作

    在Flex中,开发者可以通过一系列预定义的组件来设计和构建应用程序的界面,然后通过ActionScript 3.0添加动态功能,实现数据绑定和事件驱动的编程。 1. **Flex框架**:Flex框架包含了创建RIA所需的所有组件和容器,...

    flash actionscript3游戏开发之 5种将fla中的资源嵌入到Flex或者纯AS3项目中的方法.zip

    在Flash ActionScript3游戏开发中,将FLA中的资源嵌入到Flex或纯AS3项目是常见的需求。这些资源可能包括位图、字体、声音、动画等,它们是游戏视觉效果和交互体验的重要组成部分。本篇文章将详细讲解五种不同的嵌入...

    使用Flex Ant Tasks编译工程文件

    通常,需要将flexTasks.jar添加到Ant的classpath中,这样Ant才能识别和执行Flex相关的任务。 在"bin"目录下,可能包含了Ant运行时需要的一些可执行文件或库,例如Java编译器和其他辅助工具。在构建脚本中,可能通过...

    flex3的cookbook书籍完整版dpf(包含目录)

    3.4 节在容器中动态添加和移除子组件 3.5 节对容器使用基于约束的布局 3.6 节在容器内为子组件设置最大、最小尺寸 3.7 节为容器指定行和列的约束 3.8 节使用约束条件为文本创建排版流程(Layout Flows) 3.9 节在容器...

    flex as3 元数据标签综合

    `Embed`元数据标签用于嵌入资源(如图片或SWF文件)到SWC或SWF文件中。例如: ```as3 [Embed(source="testIcon.gif")] public var testIcon:Class ``` 在MXML中使用嵌入的资源: ```xml ``` 这使得可以在代码中...

    Flex Namespace的用法

    SWC文件中包含了两个主要的文件:catalog.xml和library.swf。catalog.xml文件列出了库的所有组件和它们的元数据。而library.swf包含了实际的ActionScript字节码。 在catalog.xml中,自定义命名空间的信息会被记录为...

    FlashDevelop学习教程

    - 可以在导入的SWC文件中查看包含的类和元件。 综上所述,《FlashDevelop学习教程》涵盖了从安装配置、项目创建到资源加载等多个方面的内容。对于初学者来说,这份教程提供了从零开始学习FlashDevelop所需的全部...

    BlazeDS 数据通信技术

    这些组件都包含在Flex SDK和rpc.swc组件库中。通常情况下,Flex应用程序会使用BlazeDS作为中间层来调用远程服务,但这并非强制性的。开发人员也可以选择直接使用HTTPService或WebService来调用远程服务。 ##### 2.0...

    A3D教程_Alternativa3d_官方教程中文翻译.doc

    - **引入A3D类库**:将A3D的SWC类库导入项目中,以便使用其提供的3D功能。 #### 三、代码解析 本节将详细介绍代码中的关键部分及其作用。 ##### 1. 导入必要类库 ```as import alternativa.engine3d.controllers....

Global site tag (gtag.js) - Google Analytics