- 浏览: 213997 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zlbdexiaohao:
怎么去掉默认的图标,folderClosedIcon=&quo ...
FLEX 构建完美的带有CheckBox三状态的Tree控件 -
zlbdexiaohao:
看不懂看不懂
FLEX 构建完美的带有CheckBox三状态的Tree控件 -
FYIHDG:
[list][*][list][*][*][list][*][ ...
ImageIO读jpg的时候出现exception:bandOffsets.length is wr -
被剥削的程序员:
你好我在引用你的comboxtree解决问题的时候,发现点击父 ...
ComboBoxTree -
527184687:
[flash=200,200][url][img][list] ...
ext treePanel 更换图标 总结
模块(Modules)
模块(Module)是创建大型Flex应用程序的一个解决方案,它允许你将你的用户接口分割成许多分散的有各自用途的小块。例如(下面出自Flex 2的文档),一个保险公司可能有数百个表单——针对于各个领域的,针对各种请求类型,以及针对各种应用等等。创建一个包含所有这些表单的Flex应用程序 将会产生一个巨大SWF文件,还会有不少问题:
应用程序越大开发过程越复杂;
应用程序越大测试过程越复杂;
应用程序越大部署过程越复杂;
SWF文件越大加载时间越长
示例程序基于Flex 2文档中的一个程序,但是我将它做了一些更改来说明几个常见的问题。这个例子展示了一个主程序和其它三个共享公有数据的模块(Module)。
其中一个设计要素是一个接口的使用,这个接口实质上是接口实现者和使用者之间的一个契约。这个例子将会说明我所说的意思。模块(Module)的接口部分 虽然不是必须的但是却可以大大简化以后的开发和维护。比如,如果开发人员有一个小组负责报告部分,另一个小组负责图表部分,如果它们一开始用了接口,那么 只要有需要,接口的实现就可以做足够多的变形而不会影响到工程结果。接口在模块(Module)中还扮演另外一个角色,我在下文中将会揭示这点。
模块(Module)是以<mx:Module>代替<mx:Application>作为根标签的MXML文件(或 ActionScript文件)。你可以将带有<mx:Module>标签的作为一个程序来看,但是它不能运行。
这个示例有一个主程序文件以及带有一个接口的两个模块。打开主程序文件你会看到:
程序代码
<mx:Panel x=”10″ y=”41″ width=”169″ height=”500″ layout=”absolute” title=”Modules”>
<mx:Text x=”10″ y=”24″ text=”Check a module to load it; uncheck to unload it” width=”129″/>
<mx:RadioButton x=”10″ y=”97″ label=”None” selected=”true”
click=”removeModule()”/>
<mx:RadioButton x=”10″ y=”123″ label=”Chart”
click=”removeModule();loadModule(‘ChartModule.swf’)”/>
<mx:RadioButton x=”10″ y=”175″ label=”Table”
click=”removeModule();loadModule(‘GridModule.swf’)”/>
</mx:Panel>
<mx:Panel x=”187″ y=”41″ width=”500″ height=”500″ layout=”absolute” title=”Module: {moduleName}”>
<mx:ModuleLoader id=”currentModule” ready=”readyModule(event)”
width=”100%” height=”100%” />
</mx:Panel>
第一个Panel包含了控制示例中模块(Module)加载和卸载的RadioButtons。第二个Panel是使 用<mx:ModuleLoader>标签加载模块(Module)的地方。注意那个id为currentModule的 ModuleLoader,它有一个关于ready事件的事件处理器。当模块SWF文件加载了足够多可以开始使用的时候,ModuleLoader 就会分派ready事件(或者说ModuleEvent.READY)。
这里有一个readyModule函数,它在<mx:Script>块中:
程序代码
private function readyModule( event:ModuleEvent ) : void
{
var ml:ModuleLoader = event.target as ModuleLoader;
var ichild:IExpenseReport = ml.child as IExpenseReport;
if( ichild != null ) {
ichild.expenseReport = expenses;
}
}
注意ModuleLoader的child属性是如何转换为IExpenseReport类的。IExpenseReport是一个所有模块 (Module)都实现了的接口。只要每个模块都实现了这个接口,它就可以很容易适应于应用程序。换句话说,想象一下当你需要创建另一个表单或者报告的时 候它的用途。并不需要更改主程序为新模块添加IF语句,你只要在新模块中实现IExpenseReport接口它就可以在程序中完美地运行。
IExpenseReport接口是:
程序代码
public interface IExpenseReport
{
function set expenseReport( ac:ArrayCollection ) : void;
}
每个模块(Module)都实现这个接口,定义各自的名为expenseReport的set函数。下面是ChartModule的根标签和接口IExpenseReport的实现:
程序代码
<mx:Module xmlns:mx=”http://www.adobe.com/2006/mxml” implements=”IExpenseReport”
layout=”vertical”
percentWidth=”100″ percentHeight=”100″ >
<mx:Script><![CDATA[
import mx.collections.ArrayCollection;
[Bindable] public var expenses:ArrayCollection;
public function set expenseReport( ac:ArrayCollection ) : void
{
expenses = ac;
}
]]></mx:Script>
…
</mx:Module>
让我们回到主程序,RadioButton的click事件会卸载任何当前已加载的模块然后加载一个新的模块。下面是ChartModule的RadioButton标签:
程序代码
<mx:RadioButton x=”10″ y=”123″ label=”Chart” click=”readyModule(‘ChartModule.swf’)”/>
这个click事件会调用上面列出的readyModule事件。
编译并运行程序
如果你使用了Flex Builder 2,请确定更改了项目的Properties将模块(Module)作为”Applications”包含进来。这样Flex Builder 2回将它们编译进SWF文件并且放进bin文件夹中。
Flex Builder注意:要创建一个使用模块(Module)的工程,请使用工程的Properties将模块文件作为”Applications”。这会使得他们被编译进SWF文件。
一旦SWF文件被创建你就可以运行主程序并点击RadioButtons在模块(Module)之间切换。
Flex Builder注意:Flex Builder并不会保存任何关于模块(Module)和主程序的从属信息。只要你对一个模块(Module)作了更改,你就可能需要重新编译主程序或其它从属的模块(Module)。
将SWF文件最优化
如果你查看一下主程序的SWF文件和模块(Module)的SWF文件的话,你会发现它们的大小差不多。这就说明,模块的SWF和主程序SWF中有很多同样的组件定义。
Flash Player并不会保存元件(symbol)的副本。例如,如果主程序有一个Button组件而一个模块(Module)也有一个Button组件,Flash Player就不会从模块中加载Button了,因为它已经在主程序中有定义了。
使用-link-report=report.xml编译主程序,这样会创建一个链接到主程序的包含所有元件信息的文件。然后在编译模块(Module)的时候会使用那个report.xml文件。
程序代码
mxmlc -load-externs=report.xml ChartModule.mxml
当ChartModule被编译的时候,所有在report.xml文件中列出的元件将会在它的SWF中省略。当我不使用report.xml文件编译 ChartModule.swf的时候,它的大小是202K。而当我使用report.xml文件的时候,SWF的大小只有68K。这大大减少了模块 (Module)的加载时间。
在文章的开始将到模块(Module)的时候,我提过接口有另一个作用。假设你没有使用接口而是在主程序中引用模块的类。当你运行link-report 的时候,你的模块类将会出现在report.xml中。当你使用使用link-report编译模块(Module)的时候你的模块并不会包含在它自己的 SWF中!起初这并不会成为一个问题,尽管主程序由于包含了模块的定义而变得很大。然而,当你更改你的模块的时候发生了什么才是重要的。如果你没有重新编 译主程序,你主程序的SWF文件将会包含模块(Module)旧的定义——而不是你已经更改过的。
程序代码
mxmlc -link-report=report.xml Main.mxml
mxmlc -load-externs=report.xml ChartModule.mxml
// etc.
如果你决定使用这个技术来减小模块(Module)的大小,那么就使用接口来确保终端用户使用的总是模块(Module)的最新版本。
Flex Builder注意:Flex Builder在一个工程里没有办法做到这些。如果你确定你将要创建一个使用模块(Module)的工程,可以考虑一下将公共的类和接口(包括event 类)放到一个SWC(Flex Library Project)中然后将模块(Module)分离到它们各自的工程里。
或者,你可以将所有东西创建为一个单一的Flex工程,然后将最优化作为一个产品化前或测试前的部署步骤在Flex Builder之外进行。
总结
将程序分割成多块并不是每个人都会使用模块(Module)。使用这种方法主程序会比平常小,而且多数用户只使用整个程序的一部分。
使用接口来使主程序或模块(Module)来与加载的模块通信。这使维护变得容易。
使用-link-report命令参数编译主程序来产生一个使用元件列表。
在主程序中使用-load-externs和report.xml编译模块(Module),这样可以使它们变得更小。
转:http://www.e-snowlife.com/?cat=10
模块(Module)是创建大型Flex应用程序的一个解决方案,它允许你将你的用户接口分割成许多分散的有各自用途的小块。例如(下面出自Flex 2的文档),一个保险公司可能有数百个表单——针对于各个领域的,针对各种请求类型,以及针对各种应用等等。创建一个包含所有这些表单的Flex应用程序 将会产生一个巨大SWF文件,还会有不少问题:
应用程序越大开发过程越复杂;
应用程序越大测试过程越复杂;
应用程序越大部署过程越复杂;
SWF文件越大加载时间越长
示例程序基于Flex 2文档中的一个程序,但是我将它做了一些更改来说明几个常见的问题。这个例子展示了一个主程序和其它三个共享公有数据的模块(Module)。
其中一个设计要素是一个接口的使用,这个接口实质上是接口实现者和使用者之间的一个契约。这个例子将会说明我所说的意思。模块(Module)的接口部分 虽然不是必须的但是却可以大大简化以后的开发和维护。比如,如果开发人员有一个小组负责报告部分,另一个小组负责图表部分,如果它们一开始用了接口,那么 只要有需要,接口的实现就可以做足够多的变形而不会影响到工程结果。接口在模块(Module)中还扮演另外一个角色,我在下文中将会揭示这点。
模块(Module)是以<mx:Module>代替<mx:Application>作为根标签的MXML文件(或 ActionScript文件)。你可以将带有<mx:Module>标签的作为一个程序来看,但是它不能运行。
这个示例有一个主程序文件以及带有一个接口的两个模块。打开主程序文件你会看到:
程序代码
<mx:Panel x=”10″ y=”41″ width=”169″ height=”500″ layout=”absolute” title=”Modules”>
<mx:Text x=”10″ y=”24″ text=”Check a module to load it; uncheck to unload it” width=”129″/>
<mx:RadioButton x=”10″ y=”97″ label=”None” selected=”true”
click=”removeModule()”/>
<mx:RadioButton x=”10″ y=”123″ label=”Chart”
click=”removeModule();loadModule(‘ChartModule.swf’)”/>
<mx:RadioButton x=”10″ y=”175″ label=”Table”
click=”removeModule();loadModule(‘GridModule.swf’)”/>
</mx:Panel>
<mx:Panel x=”187″ y=”41″ width=”500″ height=”500″ layout=”absolute” title=”Module: {moduleName}”>
<mx:ModuleLoader id=”currentModule” ready=”readyModule(event)”
width=”100%” height=”100%” />
</mx:Panel>
第一个Panel包含了控制示例中模块(Module)加载和卸载的RadioButtons。第二个Panel是使 用<mx:ModuleLoader>标签加载模块(Module)的地方。注意那个id为currentModule的 ModuleLoader,它有一个关于ready事件的事件处理器。当模块SWF文件加载了足够多可以开始使用的时候,ModuleLoader 就会分派ready事件(或者说ModuleEvent.READY)。
这里有一个readyModule函数,它在<mx:Script>块中:
程序代码
private function readyModule( event:ModuleEvent ) : void
{
var ml:ModuleLoader = event.target as ModuleLoader;
var ichild:IExpenseReport = ml.child as IExpenseReport;
if( ichild != null ) {
ichild.expenseReport = expenses;
}
}
注意ModuleLoader的child属性是如何转换为IExpenseReport类的。IExpenseReport是一个所有模块 (Module)都实现了的接口。只要每个模块都实现了这个接口,它就可以很容易适应于应用程序。换句话说,想象一下当你需要创建另一个表单或者报告的时 候它的用途。并不需要更改主程序为新模块添加IF语句,你只要在新模块中实现IExpenseReport接口它就可以在程序中完美地运行。
IExpenseReport接口是:
程序代码
public interface IExpenseReport
{
function set expenseReport( ac:ArrayCollection ) : void;
}
每个模块(Module)都实现这个接口,定义各自的名为expenseReport的set函数。下面是ChartModule的根标签和接口IExpenseReport的实现:
程序代码
<mx:Module xmlns:mx=”http://www.adobe.com/2006/mxml” implements=”IExpenseReport”
layout=”vertical”
percentWidth=”100″ percentHeight=”100″ >
<mx:Script><![CDATA[
import mx.collections.ArrayCollection;
[Bindable] public var expenses:ArrayCollection;
public function set expenseReport( ac:ArrayCollection ) : void
{
expenses = ac;
}
]]></mx:Script>
…
</mx:Module>
让我们回到主程序,RadioButton的click事件会卸载任何当前已加载的模块然后加载一个新的模块。下面是ChartModule的RadioButton标签:
程序代码
<mx:RadioButton x=”10″ y=”123″ label=”Chart” click=”readyModule(‘ChartModule.swf’)”/>
这个click事件会调用上面列出的readyModule事件。
编译并运行程序
如果你使用了Flex Builder 2,请确定更改了项目的Properties将模块(Module)作为”Applications”包含进来。这样Flex Builder 2回将它们编译进SWF文件并且放进bin文件夹中。
Flex Builder注意:要创建一个使用模块(Module)的工程,请使用工程的Properties将模块文件作为”Applications”。这会使得他们被编译进SWF文件。
一旦SWF文件被创建你就可以运行主程序并点击RadioButtons在模块(Module)之间切换。
Flex Builder注意:Flex Builder并不会保存任何关于模块(Module)和主程序的从属信息。只要你对一个模块(Module)作了更改,你就可能需要重新编译主程序或其它从属的模块(Module)。
将SWF文件最优化
如果你查看一下主程序的SWF文件和模块(Module)的SWF文件的话,你会发现它们的大小差不多。这就说明,模块的SWF和主程序SWF中有很多同样的组件定义。
Flash Player并不会保存元件(symbol)的副本。例如,如果主程序有一个Button组件而一个模块(Module)也有一个Button组件,Flash Player就不会从模块中加载Button了,因为它已经在主程序中有定义了。
使用-link-report=report.xml编译主程序,这样会创建一个链接到主程序的包含所有元件信息的文件。然后在编译模块(Module)的时候会使用那个report.xml文件。
程序代码
mxmlc -load-externs=report.xml ChartModule.mxml
当ChartModule被编译的时候,所有在report.xml文件中列出的元件将会在它的SWF中省略。当我不使用report.xml文件编译 ChartModule.swf的时候,它的大小是202K。而当我使用report.xml文件的时候,SWF的大小只有68K。这大大减少了模块 (Module)的加载时间。
在文章的开始将到模块(Module)的时候,我提过接口有另一个作用。假设你没有使用接口而是在主程序中引用模块的类。当你运行link-report 的时候,你的模块类将会出现在report.xml中。当你使用使用link-report编译模块(Module)的时候你的模块并不会包含在它自己的 SWF中!起初这并不会成为一个问题,尽管主程序由于包含了模块的定义而变得很大。然而,当你更改你的模块的时候发生了什么才是重要的。如果你没有重新编 译主程序,你主程序的SWF文件将会包含模块(Module)旧的定义——而不是你已经更改过的。
程序代码
mxmlc -link-report=report.xml Main.mxml
mxmlc -load-externs=report.xml ChartModule.mxml
// etc.
如果你决定使用这个技术来减小模块(Module)的大小,那么就使用接口来确保终端用户使用的总是模块(Module)的最新版本。
Flex Builder注意:Flex Builder在一个工程里没有办法做到这些。如果你确定你将要创建一个使用模块(Module)的工程,可以考虑一下将公共的类和接口(包括event 类)放到一个SWC(Flex Library Project)中然后将模块(Module)分离到它们各自的工程里。
或者,你可以将所有东西创建为一个单一的Flex工程,然后将最优化作为一个产品化前或测试前的部署步骤在Flex Builder之外进行。
总结
将程序分割成多块并不是每个人都会使用模块(Module)。使用这种方法主程序会比平常小,而且多数用户只使用整个程序的一部分。
使用接口来使主程序或模块(Module)来与加载的模块通信。这使维护变得容易。
使用-link-report命令参数编译主程序来产生一个使用元件列表。
在主程序中使用-load-externs和report.xml编译模块(Module),这样可以使它们变得更小。
转:http://www.e-snowlife.com/?cat=10
发表评论
-
浏览器前进后退按钮切换状态
2010-06-03 16:22 1554Flex browser manager能够让用户通过浏览器的 ... -
OUTERDOCUMENT
2010-05-26 14:38 2487scope 也更改了。我的意思是, 从 <mx:Comp ... -
FLEX module的使用
2010-05-26 14:12 1032用FLEX来开发应用难免不 ... -
flex 加载 swf
2010-01-13 13:24 1239<?xml version="1.0&qu ... -
flex下载文件
2010-01-10 10:14 1306<?xml version="1.0&qu ... -
flex最全的表单验证
2010-01-05 14:50 1188<?xml version="1.0&qu ... -
mxml中动态生成组件
2009-12-28 17:09 1437客户那边的API 返回值如下 <list> ... -
TabNavigator
2009-12-20 23:21 962<?xml version="1.0&qu ... -
flex 打开新页面 窗口最大化
2009-12-14 22:12 2352var args:String = "toolb ... -
Flex tree xml的数据源
2009-12-10 23:43 6711<?xml version="1.0&qu ... -
Flex中利用ContextMenu和ContextMenuItem类在DataGrid上创建一个自定义右键弹出菜单的例子
2009-12-10 22:49 3527<?xml version="1.0&qu ... -
flex datagrid分页排序失效
2009-12-09 22:04 1788分页改变了datagrid的数据源,数据源变了视图就跟着变了。 ... -
Flex 弹出窗口的例子
2009-12-09 00:44 1514TitleWindowApp.mxml <mx:Ap ... -
带CheckBox和级联操作的Tree
2009-12-08 23:28 2346CSDN上下载的,该Tree是采用XMLList 绑定数据的 ... -
FLEX 构建完美的带有CheckBox三状态的Tree控件
2009-12-08 23:02 7425CheckTree.as package ht.syste ... -
flex blazeds 异步加载tree
2009-12-06 14:48 1575<?xml version="1.0&qu ... -
flex 异步 tree
2009-12-06 14:33 2513例子一 <?xml version="1. ... -
FLEX数据类型和JAVA数据类型对应关系
2009-12-03 22:31 3040类型名 类型描述 Boolean 只有两个值:true 和fa ... -
BlaseDS+Spring 整合配置
2009-11-24 10:54 1259首先到spring网站下载两 ... -
flex blazeDs spring整合
2009-11-24 10:27 15221.新建一个工程Flex_Spring。Ap ...
相关推荐
Flex 基于 Module 模块的...在实际开发中,运用 Flex 的模块化开发方式,可以构建复杂且可扩展的用户界面,同时优化应用程序的性能和维护性。通过合理地组织模块,可以确保代码结构清晰,便于团队协作和项目长期维护。
### Flex 模块化应用程序开发 模块化设计在软件工程领域有着重要的意义,尤其是在像Flex这样的框架中。Flex是一款由Adobe公司开发的开源框架,用于构建高性能、具有丰富交互性的Web应用程序。通过采用模块化的开发...
Flex模块间通信是Adobe Flex应用程序开发中的一个重要概念,它允许不同模块之间共享数据、功能和服务。在大型项目中,模块化设计有助于代码组织和管理,提高代码复用性,同时降低复杂度。本示例将深入讲解如何在Flex...
Flex模块化开发是一种高效构建大型复杂应用的策略,它允许我们将应用程序分解为多个独立的、可重用的组件或模块,以提高代码的可维护性和可扩展性。在这个实例中,我们将深入探讨Flex模块化开发的关键概念和技术。 ...
通过模块化开发,Flex应用可以更好地适应不断变化的需求和技术环境,同时也提高了代码质量和开发效率。然而,需要注意的是,模块化设计也需要良好的架构规划和模块间的接口设计,以确保模块间的解耦和协同工作。 ...
Flex模块化开发是一种高效、可扩展的软件架构方式,它允许开发者将大型应用程序分解为多个独立的、可重用的组件或模块。在本案例中,“flex 模块化 modules 源码”指的是使用Adobe Flex框架进行模块化编程的具体实现...
模块(Module)是Flex应用程序的一个重要组成部分,它允许我们将大项目分解为更小、更易于管理的部分。动态加载和卸载Module是优化应用程序性能和减少初始化时间的有效方法,特别是在需要根据用户需求按需加载功能的...
通过模块化,我们可以创建独立的代码块,这些代码块可以在不同的应用程序中复用,提高开发效率并优化应用程序性能。 **什么是Flex Module?** Flex Module 是一种技术,它允许开发者将应用划分为多个模块,每个...
在“Flex4基于FluorineFx模块化系统框架”中,开发者利用最新版本的Visual Studio 2010作为.NET开发环境,同时使用FlashBuilder 4.5作为Flex应用程序的构建工具。这两个工具的结合使得前后端开发无缝对接,提高了...
在Flex中,模块(Module)是一种可重用的组件,可以被加载到主应用程序(Application)中,以实现代码的模块化和复用。 在Flex中,模块间的通信主要通过以下几种方式实现: 1. **事件监听**:模块可以通过发布...
模块化开发可以显著减少初始加载的代码量,特别是对于大型复杂项目,能提高加载速度和组织代码结构。 2. **动态加载(Dynamic Loading)**:Flex支持在运行时动态加载模块,这意味着应用可以先加载核心功能,然后在...
在Flex开发中,模块化(Module)是一种优化大型应用程序架构的有效方法。它允许我们将复杂的项目分解为多个独立的、可重用的组件,每个组件都称为一个模块。这样做可以提高代码的可维护性和可扩展性,同时降低加载...
在Flex桌面应用开发中,掌握AMD加载机制至关重要,因为它有助于组织复杂的应用结构,特别是当项目包含大量模块和第三方库时。通过AMD,开发者可以将大项目拆分为小的、独立的模块,每个模块只加载自己需要的依赖,这...
1. 模块化开发:通过模块(Module)功能,大型应用可以拆分为独立可加载的部分,优化加载时间和资源管理。 2. State管理:利用States,可以为不同场景定义不同的UI状态,简化复杂应用的管理。 3. 资源管理:I18N和...
Flex Module专题是一个关于软件开发的讨论,主要集中在使用Flex模块化技术进行应用程序设计和构建上。Flex是一个基于ActionScript和Flash Player的开放源码框架,主要用于创建富互联网应用程序(RIA)。这个专题可能...
第3章 Flex企业应用开发中的主要元素 3.1 企业应用的特点 3.2 Flex Application 3.2.1 SystemManager 3.2.2 Preloader 3.2.3 Application的作用和主要属性 3.2.4 通过SWFLoader加载Application ...
4. **模块化开发**:大型企业级应用往往需要模块化设计以提高代码复用性和维护性。Flex3的模块(Module)功能允许我们将应用拆分为独立的单元,实例20可能讲解如何创建和加载模块。 5. **动画和效果**:Flex3提供了...
第3章 Flex企业应用开发中的主要元素 3.1 企业应用的特点 3.2 Flex Application 3.2.1 SystemManager 3.2.2 Preloader 3.2.3 Application的作用和主要属性 3.2.4 通过SWFLoader加载Application ...
`ModuleLoader` 的主要功能是将模块的加载过程与应用程序的其余部分分离,这有助于实现代码的模块化和优化加载性能。在本文中,我们将深入探讨如何使用`ModuleLoader`加载模块并传递参数。 首先,让我们理解`...