前 言
从上个世纪 90 年代末开始,我一直从事与 Web 相关的技术,而且我接触的第一个服务器端技
术是 PHP。后来,我转向 ColdFusion 和 Java 的开发工作,但我始终认为自己是一个 PHP 开发
人员。当 AJAX 技术出现时,我开始与 Prototype 和 script.aculo.us 等架构打交道,并且着手创
建自己的架构。
2006 年底,我开始体验进行 Flex 开发。这有点类似速成学习班,因为我需要在大约 4-6 个星期
内为 FDS((Flex Data Services, 现在称为 LiveCycle Data Services)将要问世的版本创建一个演
示应用程序。尽管当时我是一个 Flex 和 FDS 的新手,但该项目进展顺利,而且我非常享受这
次开发以及学习过程。
然而,在享受的同时,我感觉到 Flex 的不同之处。我的意思是当我在进行 ColdFusion 或 Java
Web 的开发工作时,我并没有觉得其与 PHP 相比有不同之处。这仅仅是一个寻找正确的 API 以
及适应特定语言的问题。后来,当我开始在 DHTML 之上进行 AJAX 开发时,我感觉也没有不
同之处。你仍然使用相同的技巧、利用服务器端语言来创建大多数网站,以及在网站各处插入
一些趣味画面(对于本案例来说,它们是一些 AJAX widgets)。
当我使用 Flex 创建我的第一个 Web 项目时,我的天啊,这是一个巨大的转变。客户端和服务
器之间的清晰分离(除了服务器侧的业务逻辑之外的客户端侧业务逻辑)、需要进行编译而不
是翻译的客户端侧技术、以及客户端的两种语言等,所有这些均需要用一种不同于传统 Web 开
发的思维方式进行思考。
这就是我写作本文的原因。我希望与你分享一些与 PHP 相关的 Flex 特定的技巧。同时,我还
希望通过将 Flex 与 PHP 进行比较引入 Flex 概念,当然它们的比较必须是有意义的。因此本文
的目标读者是:
希望学习更多关于 Flex 和 Action Script 3 而不只是通过简单定义能够提供的内容的
PHP 开发人员
已经进行 Flex 应用程序编码尝试并且希望更广更深地了解 Flex 的 PHP 开发人员
本文没有涉及的内容是什么?试图改变你或说服你让你相信 Flex 优于 X 或 Y 不是我的本意。
我坚信项目具有各种各样的类型,并且利用不同的工具能够完成这些项目。
另外,本文没有为 Flex 或 ActionScript 3 提供完整的文件资料。目前,市面上有几十本专著的
数百页资料论述该主题。关于 Flex 的文章也有成千上万篇。而我的意图是在将 Flex 概念与
PHP 类似概念进行关联是有意义的情形下,针对最重要的议题为你提供足够的信息。为了使得
本文更为实用,我对其结构进行适当的安排并且尽力避免对细节进行过多的赘述。在本文的结
尾部分,我提供了 Adobe AIR 的简介和一些附加参考资料,以便于你能够查阅与本主题相关的
更多详细信息。
最后需要说明的是,对于本文给出的大部分范例,我选择使用 Flex 3 进行编程。作出这样的选
择有如下几个原因:首先,在写作本文时,Flex 4 仍然是 beta 版本。其次,由于 Flex 4 主要是
Flex 3 的演化版本,因此这里涉及的大部分应用程序能够适用于 Flex4,只需进行少许更改即
可。在一些范例中,我将指出这些不同之处。对于 PHP 范例,我选择使用 PHP 5.3 作为编程参
考语言。前面已经给出说明,现在让我们来看看下面的本文目录,然后开始用功学习。
Mihai Corlan ——Adobe 平台技术经理
目 录
什么是 Flex? .......................................................................................................................... 5
Flex: 一个框架绑定的两种语言 .............................................................................. 5
为什么你需要关注 Flex .............................................................................................. 6
从瘦客户端向智能/富客户端演化.......................................................................... 7
MXML 语言简介.................................................................................................................... 8
MXML 和 ActionScript 3 之间的混合 .............................................................. 12
CSS 式样 ....................................................................................................................... 13
在运行时修改 MXML 代码 ................................................................................... 15
ActionScript 3 语言简介 ................................................................................................... 17
隔离语句 ........................................................................................................................ 17
数据类型、变量和常量 ........................................................................................... 17
函数和匿名函数(闭包) ...................................................................................... 22
OOP:类和接口......................................................................................................... 24
变量作用域 ................................................................................................................... 36
数组 ................................................................................................................................. 37
命名空间 ........................................................................................................................ 39
与 XML 的配合 .......................................................................................................... 42
动态 ActionScript ...................................................................................................... 44
Flex 是异步的 ....................................................................................................................... 45
数据绑定、元数据标签和反射 ...................................................................................... 46
我的数据在哪里?将它显示出来! ............................................................................. 52
Flex 和 PHP 项目的用户授权 ........................................................................................ 54
建立 Flex 和 PHP 项目...................................................................................................... 54
Flex SDK 和文本编辑器 ......................................................................................... 55
Flex Builder / Flash Builder 和 Eclipse PDT / Zend Studio ..................... 55
调试 Flex 应用程序 ................................................................................................... 55
什么是 Adobe AIR .............................................................................................................. 56
下一步计划是什么? ......................................................................................................... 57
总结 ........................................................................................................................................... 58
什么是 Flex?
最简单的回答是:Flex 仅仅是创建 Flash 应用程序的另一种方法。Flash 应用程序是在 SWF 文件
中编译的,并且由 Flash Player 在浏览器中进行播放。为什么我们需要使用另一种方法创建
Flash 应用程序?传统的 Flash 应用程序是使用 Flash 制作工具创建的。如果你查看一下该工
具,你会发现它主要适用于设计人员。其中包括一个舞台(stage),一条时间轴线(timeline)
以及各种绘画工具等。
当你在开发应用程序并且追求开发效率时,你需要各种组件,你希望通过重用代码尽可能地提
高开发效率,最后但并不是最不重要的一点是,你需要一个新型的 IDE。
因此,一种修正的回答可能是:Flex 是一种能够帮助开发人员快速创建富因特网应用程序
(Rich Internet Application)的开源框架,这些应用程序能够在 Flash Player 中运行。在 2006 年
的今天,随着 Flex 2、Flash Player 9 和 ActionScript 3 的推出,该框架已经趋于定型。目前的版
本是 Flex 3,2010 初,其下一个版本 Flex 4 将要面世。
Flex: 一个框架绑定的两种语言
在 Flex 之下,你将发现下列语言和工具:
两种语言:MXML 和 ActionScript 3。Flex 提供两种语言以便创建 Flex 应用程序。在下
面的章节中,我将进一步地讨论每种语言。
一个富组件库
各种编译器和调试器
用于编译和调试 Flex 应用程序的各种命令行工具
由于 Flex 是一种开源框架,因此我极力推荐你访问该计划的主页
http://opensource.adobe.com/flex 并且下载相关的 SDK。你能够从组建库中查阅到所有组件的源
代码,你能够查询相关的开放程序缺陷和功能库(http://bugs.adobe.com/flex),以及查看各种
规范的 wiki 页面。
Flex 提供的部分效率改善应该归功于其海量组件库。该组件库包含了所有你能够想象的 UI 组件
(例如,各种输入框(input box)、面板(panel)、视窗(window)、滑动条(slider)、数据
网格(data grid)、组合框(combo box)、折叠显示(accordio)和 Tab 设置(tab set)等