29 July 2010
要成功完成本教程,请务必按照 ColdFusion 和 Flash Builder 4 beta 入门中所述设置并测试您的环境:
如果已成功完成“ColdFusion 和 Flash Builder 4 beta 入门”教程或本系列中的任何其他教程,您可以跳过上述步骤。
本教程适用于:
全部
Adobe Flash Builder 4 提供一个表单向导,它允许您使用服务器端数据快速构建一个主/详细界面并且几乎不用编写代码。首先定义 UI 控件,它将显示待编辑用户的主列表,然后生成一个用于显示和编辑详细信息的表单。
在本教程中,您将使用员工数据列表填充一个 ComboBox 控件,并自定义显示。然后,您将生成一个表单,它将显示选定员工的可编辑信息。最后,您通过实施一个按钮更新数据库中的员工记录。
正如介绍部分提到的那样,本教程使用的开发环境与 ColdFusion 和 Flash Builder 4 beta 入门教程以及本系列中的其他教程相同。
如果未列出该数据类型,请按照以下步骤操作,将您的数据类型名称指定到对 CFC 方法的 getAllData 服务调用中检索到的返回数据。
查询的每条记录已放入 ActionScript 对象中,并在名称/值对中设置每列数据(FIRSTNAME、LASTNAME、EMAIL 等)。每条记录从零开始编写索引。
注意:不同于 ColdFusion,ActionScript 是一种零索引语言。
向导允许您为数据指定返回类型名称,而不是像往常那样将返回数据作为对象进行引用。接下来您将这样做。
您将看到“Data/Services”视图的“Data Types”类别中列出了 EmployeeSalesData 数据类型(请参阅图 5)。请注意,数据类型的属性是 CFC 方法返回的查询列。
在这一部分中,您将学会如何使用员工销售数据填充 ComboBox 控件,从而创建主控件。
注意:实际使用中,您的 Flash Builder 项目中通常只有一个主应用程序文件。使用本系列进行操作时,您将为每个教程新建一个主应用程序文件,以避免创建其他 Flash Builder 项目。
ComboBox 控件将用于主用户界面图素。也可以使用 List 控件、DataGrid 控件或任何其他基于列表的控件。
现在,您将使用 getAllData() CFC 函数显示 ComboBox 控件中的员工姓氏。
getAllData() 函数拖放到 ComboBox 控件上(请参阅图 7)
注意:此时,ComboBox 控件应包含一个图标,表明它绑定到数据(请参阅图 9)。
默认情况下,“Bind To Data”对话框只允许您将数据库中的一个字段绑定到 ComboBox 显示。对于员工姓名的情况,它会出问题,因为可能有多个员工名字或姓氏相同。
在这一部分中,您将学会如何通过实施一个 ActionScript 函数,显示每个员工的名字和姓氏,从而跳过这个默认行为。
注意:您在一个模式中选定的代码或控件在切换到另一个模式时依然保持选定状态。
请注意,ComboBox 代码定义了许多属性,其中包括控件的 x 和 y 位置。creationComplete 属性实际是一个事件,它指示应用程序从 getAllData() 操作检索数据(您之前从“Data/Services”视图将该操作映射到 CFC)。dataProvider 属性获得该服务调用的结果,并将它绑定到 ComboBox 控件。尽管只显示一个字段,该属性依然将数据库的所有数据列绑定并存储到 ComboBox 控件。dataProvider 属性值两侧的花括号向应用程序表明该值是动态的。
LabelField 属性声明 ComboBox 控件中显示的变量。如果您从“Bind To Data”对话框中选择“LASTNAME”,向导会将“LASTNAME”字段添加到 LabelField 属性,指示 ComboBox 控件显示该值。
在以下步骤中,您将使用 LabelFunction 属性调用您编写的一个自定义函数,它用于将 LASTNAME 和 FIRSTNAME 变量合并到 ComboBox 控件显示中。
<fx:Script> 标签区块。,使用以下语法创建一个名为 displayFullName 的专用函数:<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
import mx.controls.Alert;
protected function comboBox_creationCompleteHandler(event:FlexEvent):void
{
getAllDataResult.token = f4CF_Getting_Started_Service.getAllData();
}
private function displayFullName()
{
}
]]>
</fx:Script>
private function displayFullName():String
{
}
对于 ComboBox 控件显示的每条员工记录,它都会运行您刚才创建的这个函数。记住,dataProvider 包含每个员工的所有数据并且 ComboBox 控件不清楚您要显示的内容,所以它需要将所有数据传递给您,供您选择所需内容。
应用程序将数据传递到一个包含名称/值对的复杂对象中的函数。您可以为这个对象随意命名,通常将它命名为 item。将它的数据类型指定为普通 ActionScript Object 实例。
displayFullName() 函数的括号之间,添加 item 参数并将它的数据类型指定为“Object”类: private function displayFullName(item:Object):String
现在,您可以一种简单的字符串连接合并数据库中列出的各个员工的名字和姓氏。记住,数据库中有两列为 FIRSTNAME 和 LASTNAME,可以通过传递给函数的 item 对象进行引用它们。
return 关键字将 FIRSTNAME 和 LASTNAME 字段返回 ComboBox 显示;请务必在两个字段之间添加一个空格,按惯例显示它们。 private function displayFullName(item:Object):String
{
return item.FIRSTNAME + " " + item.LASTNAME;
}
labelField="LASTNAME"。labelFunction 添加到 ComboBox 控件标签中,将其值设置为 displayFullName。 您的 ComboBox 控件 MXML 代码应当如下:
<mx:ComboBox x="71" y="56" editable="true" id="comboBox"
creationComplete="comboBox_creationCompleteHandler(event)"
dataProvider="{getAllDataResult.lastResult}" labelFunction="displayFullName"/>
不要对属性 labelFunction 中的函数使用括号。您只是为 ComboBox 控件提供函数名称,而不是直接调用该方法。
现在将显示员工的全名(请参阅图 12)。
在这一部分中,您将使用 Flash Builder Form Generation 向导创建一个详细表单,它将主控件(本例中为 ComboBox 控件)用作自己的数据提供程序。
此时表单应填入选定员工的员工销售数据(请参阅图 16)。
在这一部分中,您将一个 Button 控件添加到界面,它允许用户更新服务器上的员工信息。
如果放下 Button 控件时并未显示它,请单击“Design”模式按钮右侧的刷新按钮。
updateItem() 函数。updateItem() 函数拖放到“Update”按钮上(请参阅图 18)。它将 updateItem() 服务操作与“Update”按钮关联在一起。
如果视图未自动切换,请单击“Source”按钮切换到“Source”模式。
当您将 updateItem() 函数放到 Button 控件上时,Flash Builder 会生成一个自定义 ActionScript 单击处理函数功能。
Flash Builder 应当已经选中 updateItem() 服务调用的括号之间的单词“item”:
protected function button_clickHandler(event:MouseEvent):void
{
updateItemResult.token = f4CF_Getting_Started_Service.updateItem(item);
}
注意:ActionScript 中有许多事件类型。event 参数的 MouseEvent 数据类型声明这一代码是为用户鼠标交互编写的。有关 ActionScript 事件的更多信息,请参阅
此处使用单词 item 纯属巧合,它正好与 ComboBox 控件中的对象名称相同。记住,CFC 将 updateItem() 方法的期望参数名称定义为 item。
您要传递给 updateItem() 操作的服务对象包含传递的所有个别员工相关数据。这些信息存储在您之前命名的 EmployeeSalesData 数据类型中。
employeeSalesData:protected function button_clickHandler(event:MouseEvent):void
{
updateItemResult.token = f4CF_Getting_Started_Service.updateItem(employeeSalesData);
}
它将 employeeSalesData 对象以及从表单所做的全部更改传递回服务器,从而更新数据库。
员工信息此时应包含您指定的新值。
在本教程中,您学会了如何使用 Flash Builder 创建主/详细界面并且几乎不用编写代码。您还学会了如何自定义 ComboBox 控件中显示的数据。您还可以通过使用 Adobe Flash Builder 4 beta 生成表单教程进一步了解返回数据和数据类型。
Flex User Forum |
More |
| 02/07/2012 | Newbie - Views |
|---|---|
| 01/24/2012 | How to navigate through the views without losing content? |
| 02/07/2012 | ActionScript rounding issue |
| 02/07/2012 | Setting Value of Static Const |
Flex Cookbook |
More |
| 01/20/2012 | Skinnable Transform Tool |
|---|---|
| 12/12/2011 | Date calculations using 'out-of-the-box' functions |
| 12/05/2011 | String replaceAll in ActionScript |
| 12/04/2011 | Flex: Validate/revert editable Datagrid input value |