- 浏览: 1026722 次
- 性别:
- 来自: 天津
文章分类
- 全部博客 (445)
- Java (22)
- J2EE (18)
- Flex (102)
- Flex-blazeds (1)
- Flex-FABridge (2)
- Flex4 (3)
- CheckStyle (2)
- PowerDesigner (0)
- POI (2)
- Java2Word (2)
- 杂项 (15)
- 日记 (3)
- 数据库-oracle (41)
- 数据库-SQLServer (7)
- 中间件 (1)
- 英语 (8)
- C# (43)
- ASP.net (72)
- ASP.net MVC (28)
- 微软-Entity Framework (19)
- JavaScript (22)
- JQuery (31)
- EasyUI (3)
- VS2010 (4)
- CVS (1)
- Tomcat (3)
- Linux (1)
- 遗留问题 (1)
- iphone (1)
- MAC (0)
- 系统 (2)
- Web Service (4)
- Cache Manager (1)
- PMP (1)
- WCF (10)
- BootstrapJs (1)
- Web API (6)
- Go语言 (0)
- 网络协议 (2)
- Redis (10)
- RabbitMQ (10)
- Git (3)
- Kafka (5)
- ELK (5)
- Nginx (3)
- 测试 (2)
最新评论
-
ygm0720:
Table行拖拽自己实现 -
程乐平:
Flex4开发视频教程(27集)下载http://bbs.it ...
Flex4教程 -
liuweihug:
Jquery+asp.net 后台数据传到前台js进行解析的办 ...
AJAX $.toJSON的用法或把数组转换成json类型 -
weilikk:
谢谢谢谢!!
javascript IE下不能用 trim函数解决方法 -
gxz1989611:
vigiles 写道请问楼主:[Fault] exceptio ...
blazeds推送技术至Flex
前台的开发,目前RIA技术越来越具有优势,而其中的flex目前也出到了版本3.
之前采用flex开发展现层的时候,经常为程序越做越大而发愁,今天了解到了flex的module这块的功能,打算通过一两天时间学习和了解。之后进行我们之前项目的前台重构工作。
flex的Modules技术是可以被flex程序使用的一个swf文件,它不能脱离程序独立运行,但是多个程序之间可以共享它。flex的Modules技术将应用程序分割成小块、模块,主程序动态的加载所需要的模块。主程序在启动时并不全部加载所有的模块。当用户和模块没有交互的时候它不需要加载模块,同时它在模块不需要的时候可以卸载模块并释放内存和资源。
flex的Modules技术主要有如下的优点:
让swf文件初始下载尺寸更小
让加载时间更短
对应用程序更好的封装性。
一个Module是一个特殊的可以动态加载的包含IFlexModuleFactory类工厂的swf文件。它允许应用程序在运行时加载代码并在不需要主程序相关连类实现的情况下创建类的实例。
Module和RSLs(运行时共享库)很相似,他们独立分离代码将应用程序分成独立的加载的swf文件。但它比RSLs更加灵活,因为它可以在运行时动态加载/卸载并且不依赖于应用程序编译。
使用Modules的两个典型的应用场景是不同用户路径的大型应用程序和门户应用程序。 (分析略)
Modules实现了标准的类工厂接口。
通过使用共享的接口定义,减少了模块和shell之间的硬依赖(耦合)。提供了一种类型安全的沟通机制并在没有增加swf文件大小的情况下增加了一个抽象层。
下面图片展示了modules和shell之间接口的关联关系
ModuleManager 负责管理加载了的modules集合,将之对待为按照module URL为索引的单例map。加载module会触发一系列的事件来让客户端监控module的状态。module只加载一次,但是会重载并分发事件,因此客户端代码可以简单的依赖 READY 事件来获取module的类工厂来使用它。
ModuleLoader类在ModuleManager API之上最高级的API,它提供了一个基于module架构的简单实现,但是ModuleManager提供了module之上的更好的控制。
默认下,一个module会被加载进当前应用程序domain的子domain。你可以通过使用ModuleLoader的applicationDomain的属性来指定不同的应用程序domain。
因为module被加载到子domain中,因此它拥有的类将不属于主应用程序的domain中。举例:当一个module加载了PopUpManager类,那么在整个应用程序中它就变成了PopUpManager类的Owner,因为它注册到SingletonManager中。加入另外一个module晚些试图使用PopUpManager,Adobe ® Flash® Player 将会抛错。
解决方法是确保如PopUpManager、DragManager这些managers和一些共享服务都定义在主应用程序中(或者晚加载入应用程序domain中)。这样这些类可以被所有的module使用。典型的,都是通过将他们添加到脚本块中:
import mx.managers.PopUpManager;
import mx.managers.DragManager;
private var popUpManager:PopUpManager;
private var dragManager:DragManager;这项技术同时也应用到components,当module第一次使用component时,将在它自己的domain中拥有这些component的类定义。作为结果,如果别的module试图使用这些已经被另一个module使用的component,它的定义将会不能匹配到现存的定义中。因此,为了避免component的定义不匹配,在主应用程序中创建component的实例,让所有的module去引用。
因为module必须和应用程序再同一个security domain中,当你在AIR应用程序中使用任何的module SWF文件时,必须和主应用在相同的目录或者在其子目录中,确保他们在相同的security沙盒中。一个确保的方法是使用URL引用module位置不要包含“../”。
创建模块化的应用程序:
1 创建任意数量的modules。基于MXML文件的根节点是<mx:Module>。基于AS的扩展Module或者ModuleBase类。
2 编译module,方式如同应用程序的编译。可以使用基于命令行的mxmlc或者集成于flexbuilder中的编译器。
3 创建一个应用程序类。
4 在应用程序文件中使用<mx:ModuleLoader>来加载modules。或者你也可以使用mx.modules.ModuleLoader和mx.modules.ModuleManager类的方法来加载。
编译module
使用命令行举例:mxmlc MyModule.mxml
编译后生成一个swf文件,它不能独立运行也不能被浏览器执行,它只能被应用程序加载为module。它不能被Adobe® Flash® Player、Adobe® AIR,&8482; 、浏览器所直接运行。
当编译module后,你应当试图删除掉module和应用程序之间的那些冗余文件。你可以通过创建应用程序的link report来达到这个目的。当然了,flexbuilder可以自动的为你做这些。
减小module的大小
module的尺寸主要由module所使用的component和类来决定。默认情况下,module包含它所依赖的所有component的框架代码,这可能会导致其尺寸非常的大。
要想减小其尺寸,你可以通过指令让它导出应用程序class来优化它。只让module包含它所需要的类。
用命令行编译器来做的话,将在包含module的应用程序中产生一个linker report。在编译时采用load-externs选项。这个过程在flexbuilder中也需要。
用命令行编译器创建和使用linker report
1 产生linker report 和编译应用程序
mxmlc -link-report=report.xml MyApplication.mxml
默认的linker report输出位置和编译器输出问题相同,一般为bin目录。
2 编译module并传递linker report到load-externs选项mxmlc -load-externs=report.xml MyModule.mxml重新编译module如果module和应用程序在相同的工程下,那么当module改变时并不需要重新编译应用程序。这是因为应用程序是运行时加载module,而在编译期并不强制检查。同样当你改变应用程序时也不需要重新编译module。如果module和应用程序在不同的工程下,必须重新编译module。但是如果当改变有可能影响linker report或代码,你必须重新编译相应的应用程序和module。
调试module 调试使用了module的应用程序,你必须设置调试编译器选项为true。否则你将不能在module中设置中断点或在他们中间收集调试信息。在flexbuilder中调试选项默认是开启的。在命令行,调试是默认关闭的。 一个很普遍的问题是如果一个module包含了其他module所要实用的类定义这种情况。在这种情况,别的module使用时会抛错,原因见前面。解决方法是把此类定义到应用程序domain中。
在不同的服务器中加载module在不同的服务器中加载module,必须在其彼此间建立信任。跨域访问应用程序加载应用程序时必须调用allowDomain()方法并且指定你需要加载的module所在的目标domain。因此在应用程序预初始话事件处理时指定目标域来确保程序在module加载前启动。在module所在的远程服务的cross-domain文件,增加一个entry来指定加载应用程序的服务位置。在你自己加载的应用程序中的preinitialize事件处理器中加载远程cross-domain文件。在被加载的module调用allowDomain方法来和调用者通讯。 下面的例子展示了如何在加载应用程序中的init方法The following example shows the init() method of the loading application:public function setup():void { Security.allowDomain("remoteservername"); Security.loadPolicyFile("http://remoteservername/crossdomain.xml"); var request:URLRequest = new URLRequest("http://remoteservername/crossdomain.xml"); var loader:URLLoader = new URLLoader(); loader.load(request);}下面展示被加载模块的init()方法public function initMod():void { Security.allowDomain("loaderservername");} 下面是cross-domain的写法:<!-- crossdomain.xml file located at the root of the server --><cross-domain-policy> <allow-access-from domain="loaderservername" to-ports="*"/></cross-domain-policy> 预加载module 当你第一次开启应用程序来使用module,此应用程序将会比不使用module的应用程序尺寸更小。同时它也会减小等待时间。但同时,它将会在你访问以前非module的地方增加延迟。这是因为它不是预加载的。他们在第一次请求的时候被加载。 当module第一次被加载时,module的swf文件通过网络传输并储存到浏览器的缓存中。当它被卸载后又被加载时,等待时间会稍短,这是因为Flash Player将在客户端浏览器缓存中加载它,而非网络。 Module的swf文件和其他所有的swf文件一样,存在于客户端缓存一直到用户清空他们。因此,module可以被主应用程序跨不同的session访问,减少加载时间,但着也依赖于浏览器的缓存清空频率。你可以预加载module到内存即使当它目前并没有被用到的时候。使用IModuleInfo类的load方法在应用程序启动时可以预加载module。它将module加载到内存,但是并没有创建其实例。参考下面的例子:<?xml version="1.0"?>
<!-- modules/PreloadModulesApp.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="preloadModules()">
<mx:Script>
<![CDATA[
import mx.events.ModuleEvent;
import mx.modules.ModuleManager;
import mx.modules.IModuleInfo;
private function preloadModules():void {
// Get a reference to the module's interface.
var info:IModuleInfo =
ModuleManager.getModule("BarChartModule.swf");
info.addEventListener(ModuleEvent.READY, modEventHandler);
// Load the module into memory. The module will be
// displayed when the user navigates to the second
// tab of the TabNavigator.
info.load();
}
private function modEventHandler(e:ModuleEvent):void {
trace("module event: " + e.type); // "ready"
}
]]>
</mx:Script>
<mx:Panel
title="Module Example"
height="90%"
width="90%"
paddingTop="10"
paddingLeft="10"
paddingRight="10"
paddingBottom="10"
>
<mx:Label width="100%" color="blue"
text="Select the tabs to change the panel."/>
<mx:TabNavigator id="tn"
width="100%"
height="100%"
creationPolicy="auto"
>
<mx:VBox id="vb1" label="Column Chart Module">
<mx:Label id="l1" text="ColumnChartModule.swf"/>
<mx:ModuleLoader url="ColumnChartModule.swf"/>
</mx:VBox>
<mx:VBox id="vb2" label="Bar Chart Module">
<mx:Label id="l2" text="BarChartModule.swf"/>
<mx:ModuleLoader url="BarChartModule.swf"/>
</mx:VBox>
</mx:TabNavigator>
</mx:Panel>
</mx:Application> 使用ModuleLoader事件ModuleLoader类会触发很多事件,包括setup, ready, loading, unload, progress, error, 和urlChanged。你可以通过这些事件来记录程序加载过程,找寻合适module已经被卸载或者何时ModuleLoader目标url已经改变。 下面的例子使用定制的ModuleLoader组件,这个组件在主应用程序加载module时对每一个事件都做了一次报告:定制后的客户端程序<?xml version="1.0" encoding="iso-8859-1"?>
<!-- modules/CustomModuleLoader.mxml -->
<mx:ModuleLoader xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" creationComplete="init()">
<mx:Script>
<![CDATA[
public function init():void {
addEventListener("urlChanged", onUrlChanged);
addEventListener("loading", onLoading);
addEventListener("progress", onProgress);
addEventListener("setup", onSetup);
addEventListener("ready", onReady);
addEventListener("error", onError);
addEventListener("unload", onUnload);
standin = panel;
removeChild(standin);
}
public function onUrlChanged(event:Event):void {
if (url == null) {
if (contains(standin))
removeChild(standin);
} else {
if (!contains(standin))
addChild(standin);
}
progress.indeterminate=true;
unload.enabled=false;
reload.enabled=false;
}
public function onLoading(event:Event):void {
progress.label="Loading module " + url;
if (!contains(standin))
addChild(standin);
progress.indeterminate=true;
unload.enabled=false;
reload.enabled=false;
}
public function onProgress(event:Event):void {
progress.label="Loaded %1 of %2 bytes...";
progress.indeterminate=false;
unload.enabled=true;
reload.enabled=false;
}
public function onSetup(event:Event):void {
progress.label="Module " + url + " initialized!";
progress.indeterminate=false;
unload.enabled=true;
reload.enabled=true;
}
public function onReady(event:Event):void {
progress.label="Module " + url + " successfully loaded!";
unload.enabled=true;
reload.enabled=true;
if (contains(standin))
removeChild(standin);
}
public function onError(event:Event):void {
progress.label="Error loading module " + url;
unload.enabled=false;
reload.enabled=true;
}
public function onUnload(event:Event):void {
if (url == null) {
if (contains(standin))
removeChild(standin);
} else {
if (!contains(standin))
addChild(standin);
}
progress.indeterminate=true;
progress.label="Module " + url + " was unloaded!";
unload.enabled=false;
reload.enabled=true;
}
public var standin:DisplayObject;
]]>
</mx:Script>
<mx:Panel id="panel" width="100%">
<mx:ProgressBar width="100%" id="progress" source="{this}"/>
<mx:HBox width="100%">
<mx:Button id="unload"
label="Unload Module"
click="unloadModule()"
/>
<mx:Button id="reload"
label="Reload Module"
click="unloadModule();loadModule()"
/>
</mx:HBox>
</mx:Panel>
</mx:ModuleLoader>
主应用程序:<?xml version="1.0"?>
<!-- modules/EventApp.mxml -->
<mx:Application xmlns="*" xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
[Bindable]
public var selectedItem:Object;
]]>
</mx:Script>
<mx:ComboBox
width="215"
labelField="label"
close="selectedItem=ComboBox(event.target).selectedItem"
>
<mx:dataProvider>
<mx:Object label="Select Coverage"/>
<mx:Object
label="Life Insurance"
module="insurancemodules/LifeInsurance.swf"
/>
<mx:Object
label="Auto Insurance"
module="insurancemodules/AutoInsurance.swf"
/>
<mx:Object
label="Home Insurance"
module="insurancemodules/HomeInsurance.swf"
/>
</mx:dataProvider>
</mx:ComboBox>
<mx:Panel width="100%" height="100%">
<CustomModuleLoader id="mod"
width="100%"
url="{selectedItem.module}"
/>
</mx:Panel>
<mx:HBox>
<mx:Button label="Unload" click="mod.unloadModule()"/>
<mx:Button label="Nullify" click="mod.url = null"/>
</mx:HBox>
</mx:Application>
另一个采用form的例子:<?xml version="1.0" encoding="utf-8"?>
<!-- modules/insurancemodules/AutoInsurance.mxml -->
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
backgroundColor="#ffffff"
width="100%"
height="100%"
>
<mx:Label
x="147"
y="50"
text="Auto Insurance"
fontSize="28"
fontFamily="Myriad Pro"
/>
<mx:Form left="47" top="136">
<mx:FormHeading label="Coverage"/>
<mx:FormItem label="Latte Spillage">
<mx:TextInput id="latte" width="200" />
</mx:FormItem>
<mx:FormItem label="Shopping Cart to the Door">
<mx:TextInput id="cart" width="200" />
</mx:FormItem>
<mx:FormItem label="Irate Moose">
<mx:TextInput id="moose" width="200" />
</mx:FormItem>
<mx:FormItem label="Color Fade">
<mx:ColorPicker />
</mx:FormItem>
</mx:Form>
</mx:Module>
使用error事件
error事件用来处理异常。下面的例子:<?xml version="1.0"?>
<!-- modules/ErrorEventHandler.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.events.ModuleEvent;
import mx.modules.*;
import mx.controls.Alert;
private function errorHandler(e:ModuleEvent):void {
Alert.show("There was an error loading the module." +
" Please contact the Help Desk.");
trace(e.errorText);
}
public function createModule():void {
if (chartModuleLoader.url == ti1.text) {
// If they are the same, call loadModule.
chartModuleLoader.loadModule();
} else {
// If they are not the same, then change the url,
// which triggers a call to the loadModule() method.
chartModuleLoader.url = ti1.text;
}
}
public function removeModule():void {
chartModuleLoader.unloadModule();
}
]]>
</mx:Script>
<mx:Panel title="Module Example"
height="90%"
width="90%"
paddingTop="10"
paddingLeft="10"
paddingRight="10"
paddingBottom="10"
>
<mx:HBox>
<mx:Label text="URL:"/>
<mx:TextInput width="200" id="ti1" text="ColumnChartModule.swf"/>
<mx:Button label="Load" click="createModule()"/>
<mx:Button label="Unload" click="removeModule()"/>
</mx:HBox>
<mx:ModuleLoader id="chartModuleLoader" error="errorHandler(event)"/>
</mx:Panel>
</mx:Application>
使用progress事件
通过使用progress事件来追踪module加载状态。增加一个progress事件的监听器后,在module的加载时,flex会调用这个监听器。每次它被调用时,你可以查看这个事件的bytesLoaded属性来判断它的进度百分比属性。
下面的例子:<?xml version="1.0"?>
<!-- modules/SimpleProgressEventHandler.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.events.ModuleEvent;
import flash.events.ProgressEvent;
import mx.modules.*;
[Bindable]
public var progBar:String = "";
[Bindable]
public var progMessage:String = "";
private function progressEventHandler(e:ProgressEvent):void {
progBar += ".";
progMessage =
"Module " +
Math.round((e.bytesLoaded/e.bytesTotal) * 100) +
"% loaded";
}
public function createModule():void {
chartModuleLoader.loadModule();
}
public function removeModule():void {
chartModuleLoader.unloadModule();
progBar = "";
progMessage = "";
}
]]>
</mx:Script>
<mx:Panel title="Module Example"
height="90%"
width="90%"
paddingTop="10"
paddingLeft="10"
paddingRight="10"
paddingBottom="10"
>
<mx:HBox>
<mx:Label id="l2" text="{progMessage}"/>
<mx:Label id="l1" text="{progBar}"/>
</mx:HBox>
<mx:Button label="Load" click="createModule()"/>
<mx:Button label="Unload" click="removeModule()"/>
<mx:ModuleLoader
id="chartModuleLoader"
url="ColumnChartModule.swf"
progress="progressEventHandler(event)"
/>
</mx:Panel>
</mx:Application>
你也可以将module连接到一个ProgressBar控件。看下面的例子:<?xml version="1.0"?>
<!-- modules/MySimpleModuleLoader.mxml -->
<mx:ModuleLoader xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
private function clickHandler():void {
if (!url) {
url="ColumnChartModule.swf";
}
loadModule();
}
]]>
</mx:Script>
<mx:ProgressBar
id="progress"
width="100%"
source="{this}"
/>
<mx:HBox width="100%">
<mx:Button
id="load"
label="Load"
click="clickHandler()"
/>
<mx:Button
id="unload"
label="Unload"
click="unloadModule()"
/>
<mx:Button
id="reload"
label="Reload"
click="unloadModule();loadModule();"
/>
</mx:HBox>
</mx:ModuleLoader>
<?xml version="1.0"?>
<!-- modules/ComplexProgressEventHandler.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:local="*">
<mx:Panel title="Module Example"
height="90%"
width="90%"
paddingTop="10"
paddingLeft="10"
paddingRight="10"
paddingBottom="10"
>
<mx:Label text="Use the buttons below to load and unload
the module."/>
<local:MySimpleModuleLoader id="customLoader"/>
</mx:Panel>
</mx:Application>
这个例子并不会对所有的事件改变ProgressBar标签的属性,加入你加载了module按后再卸载它,label属性还是保持“LOADING 100%”。为了调整它的属性,你必须定义其他的ModuleLoader事件处理器,比如unload和error事件。
发表评论
-
Flex 双斜杠替换单斜杠
2012-02-23 16:11 3304在数据库中存入\r 或者 \n,java或者C#取出后,会变 ... -
flex4操作xml文件实例
2011-11-29 16:33 1686本实例共两个文件: 1、主程序:test.mxml & ... -
教你7步实现flex自定义Event及参数传递
2011-11-29 16:31 1456Flex应用开发过程中如需要灵活的在不同组件 ... -
Flex异步令牌AsyncToken的用法介绍
2011-11-29 16:22 1476什么是AsyncToken?官方文档是这样描述的:&qu ... -
Flex验证码
2010-07-26 11:28 1569Flex验证码 -
Flex DateGrid表头全选
2010-07-26 11:27 1596Flex DateGrid表头全选 -
Flex中字符串ReplaceAll
2010-05-17 16:22 1480用过FLEX中String类型的朋友可能知道,replace这 ... -
xmllist转换成array
2010-04-26 16:24 2352//将xmllist转黄成array。 ... -
Flex 屏蔽IE的快捷键
2010-04-24 15:21 3697如果项目叫Demo,那么他的HTML应该叫做Demo.html ... -
textinput restrict(正则表达式,约束,限定)
2010-04-20 08:57 2038通常要对输入TextInput中的数据进行验证,如:年龄等,如 ... -
不适用PopUpManage弹出
2010-04-06 09:26 1345Test包下test.mxml代码 <?xml ve ... -
Flex4教程
2010-03-30 11:05 17799最近在学习Flex4,并且开始使用FlashBuilder4, ... -
在AS3中删除一个XML节点
2010-03-29 16:49 1507如果我们在AS3中声明了一个XML片段,并且想在运行时删除其中 ... -
如何限制文本输入的类型?
2010-03-29 09:38 1473在制作Flash表单的时候,我们通常需要限定一下用户输入数据的 ... -
监听IE关闭事件
2010-03-26 10:57 1802//mxml下写入private function AppCo ... -
Flex DataGrid取其中的某一个值
2010-03-22 14:56 2638<?xml version="1.0" ... -
Flex ComboBox prompt使用
2010-03-22 14:55 2342<?xml version="1.0" ... -
一个默认不出现滚动条的hack
2010-03-22 14:45 1328在app里加入 private function prein ... -
Flex 编译参数
2010-03-22 14:26 1224下面是一些常见的编译器参数: 1,【verbose-stack ... -
Flex DataGrid中的DataGridColumn实现Tooltip/Datatip
2010-03-19 10:42 3139I had the problem that I wanted ...
相关推荐
在提供的压缩包文件中,readme.txt可能包含了关于如何使用FlexModule_j2ee的详细说明,包括安装步骤、配置指导以及示例代码。而webtier.war文件则可能是一个已经打包好的Web应用,展示了FlexModule_j2ee的使用示例...
Flex 基于 Module 模块的开发是一种有效的软件架构策略,它允许将大型应用程序分解为更小、更易于管理的单元,称为模块。模块化的主要目标是提高代码的可维护性、可扩展性和性能。 1. **模块化的定义与原理** - **...
Flex模块间通信是Adobe Flex应用程序开发中的一个重要概念,它允许不同模块之间共享数据、功能和服务。在大型项目中,模块化设计有助于代码组织和管理,提高代码复用性,同时降低复杂度。本示例将深入讲解如何在Flex...
FlexModule_j2ee.zip是一个压缩包,包含了将Flex前端技术集成到JSP(JavaServer Pages)和J2EE(Java 2 Platform, Enterprise Edition)后端环境中的示例工程。这个项目旨在展示如何在传统的Web应用中嵌入富互联网...
【Flex Module PPT详解】 ...总结起来,Flex Module 和RSLs都是Flex开发中的重要工具,它们分别解决了代码组织、启动速度和资源共享的问题。理解并灵活运用这两个特性,能够显著提升Flex应用程序的质量和性能。
在实际开发中,灵活运用Flex模块可以极大地提升应用程序的可扩展性和性能。在ITEYE分享的这个实例中,开发者可能通过具体的代码示例和演示,详细展示了如何创建、加载、卸载模块以及如何在模块间传递信息。通过学习...
在Flex开发中,`ModuleLoader` 是一个关键组件,它允许开发者动态地加载MX模块(即Flex模块,独立的SWF文件)。`ModuleLoader` 的主要功能是将模块的加载过程与应用程序的其余部分分离,这有助于实现代码的模块化和...
在实际开发中,为了有效利用Flex的Module和客户端缓存,开发者需要注意以下几点: - **模块划分**:合理划分模块,确保每个模块有明确的功能范围,避免模块间的紧密耦合。 - **缓存策略**:设置合适的缓存策略,...
3.3 Flex Module 3.3.1 创建模块 3.3.2 模块的编辑与编译 3.3.3 模块文件的加载 3.3.4 主应用和模块的交互 3.4 Flex库文件SWC 3.5 Flex编译模式、链接模式与RSL 3.5.1 使用系统RSL—...
- 支持 Flex Module 的开发,使得模块化编程更加灵活。 #### 4. **Parsley** - **简介**:Parsley 是由 SpiceFactory 开发的一个基于 Actionscript 3 的开发结构框架,被 Adobe 官方咨询团队推荐作为 IoC 容器。 ...
3.3 Flex Module 3.3.1 创建模块 3.3.2 模块的编辑与编译 3.3.3 模块文件的加载 3.3.4 主应用和模块的交互 3.4 Flex库文件SWC 3.5 Flex编译模式、链接模式与RSL 3.5.1 使用系统RSL—...
【Flex面试题】Flex面试题主要涵盖Flex的基础概念、开发框架、MVC模式的应用、内存管理、垃圾回收机制、前端性能优化以及与后端通信等多个方面。以下是对这些知识点的详细解析: 1. AS2与AS3的区别: AS2...
Flex是Adobe开发的一种用于创建富互联网应用程序(RIA)的框架,它基于ActionScript和MXML,主要用于构建交互式的用户界面。在Flex中,模块(Module)是一种可重用的组件,可以被加载到主应用程序(Application)中...
目录: 第1篇 基础知识篇 第1章 走进Flex世界 ... 第17章 Module机制 第18章 RSL运行时共享库 第5篇 Flex通信篇 第19章 与JavaScript/AJAX通信 第20章 Flex与PHP通信 第21章 Flex与Java EE通信