Flex 的MVC 模型
1. 模型/Model 组件封装了数据和与数据相关的行为。
2. 视图/View 组件定义了应用程序的用户界面。
3. 控制器/Controller 组件则负责处理程序中的数据连接。
 
通常涉及到的web 服务器类型有
1. 纯web 服务器,它们仅将用户的请求回复一个简单的静态HTML 页面。在这种情况下,需要将Flex 应用程序的SWF 文件嵌入到一个HTML 页面中。
2. web 应用服务器,如JRun、ColdFusion 或者PHP,它们可以动态地生成页面。在这
种情况下,将使用到与服务器技术相关的库,并动态地处理它们的内容。
3. J2EE 应用服务器或servlet 容器。向一个J2EE 应用服务器或servlet 容器发出请求,
如JRun、Tomcat 或WebSphere,通常你需要使用Flex Data Services。
 
ActionScript 可以出色地完成如下任务:
1. 处理事件
2. 处理错误
3. 在MXML 语句中将数据对象绑定到Flex 控件上
4. 定制组件
 
<?xml version="1.0"?>
<!-- ?xml 标签必须位于第一行-->
<!--MXML 根元素标签-->
<mx:Application xmlns:mx="[url]http://www.adobe.com/2006/mxml[/url]">
<!--定义一个面板容器来放置控件-->
<mx:Panel title="My Application">
<!--TextInput 控件用来进行用户输入-->
<mx:TextInput id="myInput" width="150" text=""/>
<!--TextArea 控件用来进行输出-->
<mx:TextArea id="myText" text="" width="150"/>
<!--按钮控件来触发拷贝-->
<mx:Button id="myButton" label="Copy Text"
click="myText.text=myInput.text;"/>
</mx:Panel>
</mx:Application>
前面的例子是在MXML 中直接插入ActionScript 代码。尽管这种技术只需要一两行
ActionScript 代码,但是对于更为复杂的逻辑实现,你就需要在<mx:Script>块中定义
ActionScrip
<?xml version="1.0"?>
<!-- ?xml 标签必须位于第一行-->
<!--MXML 根元素标签-->
<mx:Application xmlns:mx="[url]http://www.adobe.com/2006/mxml[/url]">
<mx:Script>
<![CDATA[
// 定义一个ActionScript 功能函数
private function duplicate():void {
myText.text=myInput.text;
}
]]>
</mx:Script>
<!--定义一个面板容器来放置控件-->
<mx:Panel title="My Application">
<!-- TextInput 控件用来进行用户输入-->
<mx:TextInput id="myInput" width="150" text=""/>
<!-- TextArea 控件用来进行输出-->
<mx:TextArea id="myText" text="" width="150"/>
<!--按钮控件来触发拷贝-->
<mx:Button id="myButton" label="Copy Text"
click="duplicate();"/>
</mx:Panel>
</mx:Application>
在本例中,使用ActionScript 功能函数来实现了一个事件监听器。这样做的好处是使MXML 代码与ActionScript 代码分离,以提供更好的健壮性和灵活性。
 
使用数据绑定
Flex 提供简洁的语法来实现组件间的、或与数据模型的绑定。随后的例子中,在波浪括号/{ }里的数值将TextArea 控件与TextInput 控件的文本属性联系起来。当用户在TextInput控件中输入文本时,它会自动地拷贝到TextArea 控件中去
<?xml version="1.0"?>
<!-- ?xml tag must start in line 1 column 1 -->
<!-- MXML root element tag. -->
<mx:Application xmlns:mx="[url]http://www.adobe.com/2006/mxml[/url]">
<!-- Flex controls exist in a container. Define a Panel container. -->
<mx:Panel title="My Application">
<!-- TextInput control for user input. -->
<mx:TextInput id="myInput" width="150" text=""/>
<!-- Output TextArea control. -->
<mx:TextArea id="myText" text="{myInput.text}" width="150"/>
</mx:Panel>
</mx:Application>
 
使用事件去处理错误
<mx:Script>
<![CDATA[
public function showErrorDialog(error:String):void {
// 具体功能实现...
}
]]>
</mx:Script>
...
<mx:WebService id="WeatherService" ...">
<mx:operation name="getFoo"
fault="showErrorDialog(event.fault.faultString);"/>
</mx:WebService>
 
控制应用程序的外观
1. 大小/Sizes,即组件或应用程序的高度和宽度。
2. 样式/Styles,即一组特性,如字体、排列方式、颜色等。它们都是通过层叠样式(CSS)来进行设置的。
3. 皮肤/Skins,即可以进行改变的组件视觉元素。
4. 行为/Behaviors,即Flex 组件在视觉或听觉效果方面的变化。
6. 视图状态/View state 可以让你通过修改它的基础内容,来改变组件或程序的内容和外观。
7. 变换/Transitions 可以让你定义屏幕上发生改变的视图状态。
 
MXML 标签与ActionScript 类的关系
Adobe 是通过ActionScript 类库来实现Flex 应用程序的。类库包括了组件(容器和控
件),管理类,数据服务类等等。事实上,你是在使用类库所支持的MXML 和ActionScript来开发Flex 应用程序。
MXML 标签与ActionScript 类或类的属性相对应。Flex 剖析MXML 标签并编译成相应的SWF 文件
 
MXML 相关的技术标准
1. XML 标准。XML 文档使用标签去决定结构化信息的内容,以及它们之间的关系。
2. 事件模型标准。Flex 事件模型是文档对象模型/Document Object Model (DOM)第
三级事件的一个子集,该模型是由World Wide Web Consortium(W3C)起草制定。
3. Web 服务标准
Flex 提供与服务器交互的MXML 标签,遵循了Web 服务描述语言/Web Services
Description Language(WSDL)的规则。具体包括了简单对象访问协议/Simple Object Access
Protocol(SOAP)和超文本传送协议/Hypertext Transfer Protocol(HTTP)。
4. Java 标准
Flex 提供了与服务器端Java 对象交互的MXML 标签,包括plain old Java objects
(POJOs),JavaBeans 和企业级/Enterprise JavaBeans(EJBs)。
5. HTTP 标准
Flex 提供了相应的MXML 标签去支持标准的HTTP GET 和POST 请求,以及对HTTP
返回数据的处理。
6. 图形标准
Flex 还提供了相应的MXML 标签去使用JPEG,GIF 和PNG 图象。Flex 还能够将SWF
文件和Scalable Vector Graphics(SVG)文件导入到应用程序中。
7. 层叠样式表标准
MXML 样式的定义和使用遵循了W3C Cascading Style Sheets (CSS)标准。
 
MXML 程序中的ActionScript
ActionScript 极大地扩展了Flex 开发人员的能力。通过使用ActionScript,你可以定义事件监听器,获取或设置组件的属性,处理回调功能,创建新的类、包和组件等。
你可以运用如下所示方法在Flex 中使用ActionScript:
1. 在<mx:Script>标签中插入ActionScript 代码块。
2. 调用存储在system_classes 目录结构中的全局ActionScript 功能函数。
3. 引用user_classes 中的外部类和包来处理更为复杂的任务。
4. 使用标准的Flex 组件。
5. 使用ActionScript 类扩展已有的组件。
6. 使用ActionScript 创建新的组件。
7. 在Flash 创建环境中创建新的组件(SWC 文件)。
 
创建ActionScript 组件
通过使用ActionScript 并在Flex 程序中进行引用的方式,你可以创建可复用的组件。使用ActionScript 所创建的组件可以包含图形元素、定制的商业逻辑、或扩展已存在的Flex 组件。
例如,你可以定义一个定制的按钮,它由Flex 的按钮控件派生出来,就象这样:
package myControls
{
public class MyButton extends Button {
public function MyButton() {
...
}
...
}
}
这个例子中,你在MyButton.as 文件里编写好MyButton 控件,并将文件保存到Flex 应用程序的根目录的myControls 子目录下
 
在MyApp.mxml 文件里
<mx:Application xmlns:mx="[url]http://www.adobe.com/2006/mxml[/url]"
xmlns:cmp="myControls.*" >
<cmp:MyButton label="Jack"/>
</mx:Application>