| Flash Media Server学习站>>www.FMScn.com |
本章节将提供一系列的课程教授你如何开发 Flex应用程序。
第一节创建你的第一个应用程序
本节将向你展示如何使用 Adobe Flex Builder编译和运行一个简单的 Flex应用程序。其中涉及的重点内容包括 Flex Builder项目的概念。在 Flex Builder中,所有的程序都被包含在项目/projects里。
创建一个项目
在 Flex Builder中创建一个 Flex应用程序之前,你必须首先要创建一个项目。当创建好项目文件时,主 MXML程序文件就已经准备好。然后你就可以在项目中添加各种资源,如 MXML组件文件、 ActionScript文件等等。其主要操作步骤有:
4. 点击完成 /Finish。 Flex Builder创建好新的项目并在导航视图中进行显示。
新建项目向导将自动生成项目配置文件,存放被编译 SWF文件的输出目录,以及主程序文件 Lessons.mxml。
5. 确定自动构造选项 /automatic build option是打开的,选择 Select Project > Build Automatically。
创建并运行应用程序
Flex Builder将在 Lessons.mxml文件中插入随后代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
</mx:Application>
构造完成后,请点击运行 /Run按钮来执行程序。
一个浏览器打开并运行应用程序。
在这一节中,你学习了在 Flex Builder中如何创建一个项目,以及如何编译和运用一个 Flex应用程序。
第二节获取并显示数据
为了在应用程序中使用数据, Adobe Flex包括了与 HTTP servers,web services或 remote object services(Java objects)进行交互的组件,这些组件被称之为远程过程调用( RPC)服务组件。
与 Adobe ColdFusion,PHP或类似的服务器技术不同, Flex应用程序并不直接连接数据库。举个例子,你可以在一个 Flex文件中插入 HTTP service来实现与 ColdFusion文件的交互,以获取 MySQL数据库中的数据,转换成 XML,然后返馈给 Flex应用程序。
在本节中,你将学习创建一个简单的 blog阅读器。你使用了被称之为 HTTPService的 RPC service组件从 RSS中获取数据,然后将数据绑定到 Label、DataGrid、TextArea和 LinkButton控件上。
为了完成这个项目,执行的步骤如下:
出于安全的原因,在客户端计算机上 Flash Player中运行的应用程序,只有在满足如下条件之一的情况下,才能访问远程的数据:
插入并配置 blog阅读器 在本小节,你将学习创建一个 blog阅读器。
Title: Blog Reader Width: 475 Height: 400
X: 10
Y: 10
X: 20
Y: 20 Width: 400
7. 选择 TextArea控件并设置相应属性:
X: 20
Y: 175 Width: 400
8. 选择 LinkButton控件并设置相应属性: Label: Read Full Post
X: 20
Y: 225
界面布局看起来就象这样:
9. 点击工具条上的 Source button切换成编辑器源代码模式。在 BlogReader.mxml文件中输入如下 MXML代码: <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Panel x="10" y="10" width="475" height="400" layout="absolute" title="Blog Reader"> <mx:DataGrid x="20" y="20" id="dgPosts" width="400">
<mx:columns> <mx:DataGridColumn headerText="Column 1" dataField="col1"/> <mx:DataGridColumn headerText="Column 2" dataField="col2"/> <mx:DataGridColumn headerText="Column 3" dataField="col3"/>
</mx:columns> </mx:DataGrid> <mx:LinkButton x="20" y="225" label="Read Full Post"/> <mx:TextArea x="20" y="175" width="400"/>
</mx:Panel> </mx:Application>
10.保存文件,完成编译后运行。一个浏览器窗口将打开,如下所示。
到这一步,应用程序还没有显示任何 blog信息。接下来的一步是使用一个称之为 HTTPService的 RPC服务组件来获取 blog的信息。
插入 HTTPService组件
对于 blog阅读器这个项目,其数据源来自于 http://www.adobe.com/go/mchotinblog。你使用 HTTPService组件来访问 blog的 XML。该组件发送 HTTP GET或 POST请求,并获取反馈回来的数据。
1.在源代码模式下,在 <mx:Application>标签中输入 <mx:HTTPService>标签:
<mx:HTTPService
id="feedRequest"
url="http://weblogs.macromedia.com/mchotin/index.xml"
useProxy="false"/>
url属性指明了被请求文件所在的位置。在本例中,该 URL一直是有效的,但是你仍然
需要确定它是否已经发生改变。 useProxy属性表明你并不打算在服务器上使用代理。因为 Matt's blog上面有 crossdomain.xml设置,所以 Flash Player可以访问该服务器上的远程数据。接下来提示应用程序向指定的 URL发送请求。
2. 在<mx:Application>标签后,添加 creationComplete属性(粗体显示): <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
creationComplete="feedRequest.send()" >
你的应用程序每次启动时, HTTPService组件的 send()方法将被调用。该方法向指定的 URL发出 HTTP GET或 POST请求,并得到 HTTP回应。在本例中, RSS feed将返回 XML数据。
接下来,检测 RSS feed的获取是否成功。然后将数据绑定到 Label控件上,就象这样:
3. 在<mx:Panel>标签中,将 title属性的值用随后的表达式替换:
title="{feedRequest.lastResult.rss.channel.title}"
当 HTTPService组件返回 XML时,在名叫 lastResult的 ActionScript对象中进行剖析。 lastResult对象的结构反映了 XML文档的结构。
XML的结构通常如下所示: <rss>
<channel> <title> other child nodes of <channel> <item>
<title>
other child nodes of <item> </item> ...
HTTPService组件的 lastResult对象反映了这种结构,你的代码看起来就象这样: <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" creationComplete="feedRequest.send()" >
<mx:HTTPService id="feedRequest" url="http://weblogs.macromedia.com/mchotin/index.xml" useProxy="false" />
<mx:Panel x="10" y="10" width="475" height="400" layout="absolute" title="{feedRequest.lastResult.rss.channel.title}">
<mx:DataGrid x="20" y="20" id="dgPosts" width="400">
<mx:columns> <mx:DataGridColumn headerText="Column 1" dataField="col1"/> <mx:DataGridColumn headerText="Column 2" dataField="col2"/> <mx:DataGridColumn headerText="Column 3" dataField="col3"/>
</mx:columns> </mx:DataGrid>
<mx:LinkButton x="20" y="225" label="Read Full Post"/> <mx:TextArea x="20" y="175" width="400"/> </mx:Panel>
</mx:Application>
4. 保存文件,编译完运行。
组装 DataGrid控件 在应用程序中,使用 DataGrid控件显示新近贴子的标题。
<mx:DataGridColumn headerText="Posts" dataField="title" />
DataGrid控件的第一列用来显示标题。实现它是通过确定包含标题数据的 XML中的字段,然后输入这个字段作为 dataField的属性值。在 dataProvider属性( item)中指定的 XML结点,名为 title的子结点中包含了所需的信息。
dataProvider="{feedRequest.lastResult.rss.channel.item}">
<mx:columns> <mx:DataGridColumn headerText="Posts" dataField="title" /> <mx:DataGridColumn headerText="Date" dataField="pubDate" width="150" />
</mx:columns> </mx:DataGrid>
5. 保存文件,编译后运行。
显示所选的项
当用户在 DataGrid控件中进行选择时,你希望应用程序在 TextArea控件中只显示贴子的头几行内容。在 XML供给器的项结点中,这个信息被包含在一个称之为 description的字段里。
1. 在源代码模式中,在 <mx:TextArea>标签中输入如随后所示的 htmlText属性:
<mx:TextArea x="20" y="175" width="400"
htmlText="{dgPosts.selectedItem.description}" />
对于在 DataGrid组件中所选择的每个项(名称为 dgPosts),description字段的数值被使
用作为 htmlText的属性,该属性使你可以显示 HTML格式的文本。2. 保存文件,编译后运行。点击 DataGrid控件中的分列,每个贴子的头几行内容将出现在 TextArea控件中。
创建一个动态连接
RSS供给器并不提供贴子的完整文本,但是你还是可以使用户能够读到这些贴子,如果他们有兴趣的话。 RSS供给器没有提供的信息,可以通过连接到各个贴子的 URLs来实现。在 XML供给器的 item结点中,这个信息被包含在一个称之为 link的字段中。
你可以创建一个动态连接来显示在 DataGrid中被选贴子的全部内容。
1. 在源代码模式里,在 <mx:LinkButton>标签中输入如随后所示的 click属性:
<mx:LinkButton x="20" y="225" label="Read Full Post" click="navigateToURL(new URLRequest(dgPosts.selectedItem.link));" />
DataGrid控件中被选项的连接字段的值, dgPosts.selectedItem.link由 navigateToURL()方法的参数所指定,每当用户点击 LinkButton控件时被调用。 navigateToURL()方法在一个新打开的浏览器窗口中,加载从指定 URL传来的文档。
2. 保存文件,编译后运行。
在本节中,你学习了使用称为 HTTPService的 RPC service组件从 RSS供给器中获取数据,然后将数据绑定到 Label,DataGrid,TextArea和 LinkButton控件上。
第三节创建一个受约束的布局
本节将教你学会如何创建一个布局受约束的应用程序。受约束的布局可以确保用户界面中的组件在程序窗口大小发生变化时,也能自动地作出调节。备注:你可以通过使用嵌套的布局容器 /nested layout container来实现相同的目的。
受约束的布局每当用户改变应用程序的窗口大小时,你希望布局的组件能够自动地进行调节,改变它
们的大小和位置。受约束的布局方式能够实现这种效果。创建受约束的布局,你必须将容器的布局属性设置为绝对方式( layout="absolute")。备注:帆布容器 /canvas container并不需要进行 layout=”absolute”的属性设置,因为它默
认是绝对布局方式。举个例子,如果你想在用户增宽程序的窗口时拉长 TextInput文本框,你可以将控件锚定在容器的左右边缘上,使文本框的宽度由窗体来确定。在 Flex中,所有的约束都是被设置为与容器的相对距离,它们不可能被设置为相对于其它控件。
插入并放置组件创建受约束布局的第一步是在容器中放置组件,并将布局属性设置为绝对值方式。为了精确到象素,你可以直接设置 x和 y坐标,而不是在容器中拖拉组件。
如果你看到的是属性表格而不是预览视图,请点击视图工具条中的标准视图按钮 /Standard View button。
<mx:Button x="330" y="150" label="Send"/>
然后,点击工具条上的设计按钮来预览布局效果。它看起来就象这样:
10. 保存文件并运行。
11. 拖拉浏览器的边缘使之更大或更小。组件保持它们与窗体左 /上边界的相对位置,但是它们并没有进行扩展或压缩。举个例子,如果你的窗体过于狭窄,那么发送按钮就会看不到,而 TextInput控件和 TextArea控件也会被拦住一部分。
接下来的一步是为控件设置布局约束,以便它们可以在程序窗体大小改变时进行调节。
定义布局约束
在布局中放置好组件后,你就可以进行布局约束的定义了。在 MXML编辑器的设计模式中,选择 TextInput控件(用来输入电子邮件地址的)。
在 Flex属性视图中,确保 Layout category of properties是展开的。 Layout category中包含了设置锚定的选项。
3. 为 TextInput控件定义布局约束,在视图中选择左 /右锚定框,并指定距离窗体左边
缘 90,距离窗体右边缘 60,就象这样:
这些约束也可以通过 MXML代码来实现: <mx:TextInput y="60" left="90" right="60"/>
4. 在编辑器的设计模式下,选择 TextArea控件,为它设置四个角与容器的距离: Left: 90 Right: 60 Top: 90 Bottom: 190
在 Flex属性视图中的布局分类里, TextArea控件看起来就象这样:
7. 拖拉浏览器窗体的边缘使其更大或更小。举个例子,如果你使窗体更狭窄, Send按钮会向左边移动,同时 TextInput和 TextArea文本框会变得更加狭窄。
如果你使浏览器窗体更加宽大, Send按钮会向右边移动, TextInput和 TextArea文本框会变得更宽。
在本节中,你学习了如何使用 Flex Builder创建受约束的布局。
第四节使用列表控件
你可以在程序中使用列表控件,如 ComboBox,List或 HorizontalList。在插入这些类型的控件后,你必须装入内容并进行显示。在 Flex中,控件是由数据提供器来进行组装的,它就象一个类似于数组的对象收集器。
在本节中,你将学习如何装入列表控件并进行显示。
插入并放置控件首先,创建一个简单的布局,在其中包含一个 ComboBox控件和一个 submit按钮。