高级 ColdFusion Flash 表单技术--使用对象数组处理 ActionScript 中的记录集

使用对象数组处理 ActionScript 中的记录集

如果您停下来想想这个问题,您可以使用结构变量的数组来包含数据,类似于 ColdFusion 查询(记录集)变量。如果我在以下表单中有数据:

行号名称名称管理状态
1Fred123FALSE
2Ginger234TRUE
使用 cfquery 标签,我可以从这样一个表中检索数据:
<cfquery name="qUsers" datasource="thisData">
SELECT name, id, adminStatus
FROM User
</cfquery>

然后使用以下内容引用 Ginger 的管理状态:

	qUsers.adminStatus[2]

[queryName].[columnName][rowNumber]

不幸的是,只有 ColdFusion 应用程序服务器了解 ColdFusion 查询对象。提供相同数据结构的另一种方法是作为结构变量的数组。使用类似以下内容的代码,我可以将我的查询变量转换为结构变量的数组:

<cfset aUsers = arrayNew(1)>
<cfloop from="1" to="#qUsers.recordCount#" index="i">
<cfset aUsers[i] = structNew()>
<cfloop list="#qUsers.columnList#" index="columnName">
<cfset aUsers[i][columnName] = qUsers[columnName][i]>
</cfloop>
</cfloop>

请参见 demo_query2structarray.cfm。

然后我可以引用 Ginger 的管理状态:

	aUsers[2].adminStatus

[arrayName][index].[struct key name]

作为结构数组格式化的记录集在各个方面都非常有用。例如,它们可以通过 SOAP 作为 Web 服务请求或响应传递,而 ColdFusion 查询对象则不能。

ActionScript 处理数据的“数据集”时使用非常相似的数据结构:对象变量的数组(“对象数组”)。例如,上面显示的数据表可能在 ActionScript 中表示,如下所示:

var users = [ ];
var user1 = {name:'Fred', id:123, adminStatus:false};
users.push(user1);
var user2 = {name:'Ginger', id:234, adminStatus:true};
users.push(user2);
使用对象数组作为数据提供者

cfselect 和 cfgrid 标签使用的 Flash 组件支持名为 dataProvider 的属性。填充 cfselect 标签的一个方法是通过创建字符串值的数组并将其设置为您控件的数据提供者。您使用每个字符串作为标签或一行控件的可见内容。例如:

<cfsavecontent variable="loadData">
var users = ["Jan", "Joe", "Bob"];
userSelect.dataProvider = users;
</cfsavecontent>

<cfform format="flash" width="300" height="500">
<cfinput name="loadData" type="button" value="Load Data"
οnclick="#loadData#">
<cfselect name="userSelect">
<option>default</option>
</cfselect>
</cfform>

请参见 demo_cfselectdataprovider1.cfm 获得完整代码示例。

本示例中,初始标签“default”被替换为新的一组标签。您还可以使用 .addItem() 方法向选择控件添加新的项目,而不是替换它们。例如:

<cfsavecontent variable="loadData">
var users = ["Jan", "Joe", "Bob"];
for(var i=0; i < users.length; i++)
{
userSelect.addItem(users[i]);
}
</cfsavecontent>

<cfform format="flash" width="300" height="500">
<cfinput name="loadData" type="button" value="Add Data"
οnclick="#loadData#">
<cfselect name="userSelect">
<option>default</option>
</cfselect>
</cfform>

请参见 demo_cfselectdataprovider2.cfm 获得完整代码示例。

当然,您还可以向控件添加用户提供的数据,如下所示:

<cfsavecontent variable="addData">
var newLabel = newData.text;
userSelect.addItem(newLabel)
;
</cfsavecontent>

<cfform format="flash" width="300" height="500">
<cfinput name="loadData" type="button" value="Add Data"
οnclick="#addData#">
<cfinput name="newData" type="text" />
<cfselect name="userSelect">
<option>default</option>
</cfselect>
</cfform>

请参见 demo_cfselectdataprovider3.cfm 获得详细信息。

或者,您可以在控件中为每个项目指定一个不同于可见标签的数据值,就像您指定一个选项值一样,该值不同于通过标签指定默认数据时的可见选项文本。为此,您可以向 dataProvider 指定一个对象数组,它包含具有两个属性的对象:标签和数据。例如:

<cfsavecontent variable="loadData">
var users = [];
var user1 = {label:'Fred', data:123};
users.push(user1);
var user2 = {label:'Ginger', data:456};
users.push(user2);

userSelect.dataProvider = users;
</cfsavecontent>

<cfform format="flash" width="300" height="500">
<cfinput name="loadData" type="button" value="Load Data"
οnclick="#loadData#">
<cfformitem type="text" bind="{userSelect.selectedItem.data}" />
<cfselect name="userSelect">
<option value="default value">default</option>
</cfselect>
</cfform>

请参见 demo_cfselectdataprovider4.cfm。

在选择控件中,.selectedItem 属性是对当前选择行对象(“项目”)的引用,如控件的 dataProvider 属性所指定。如果标签和数据值都已指定,则它将引用具有这两个属性的对象。

在上面的示例中,通过使用绑定cfformitem 标签中使用数据值。绑定的工作方式类似于 onchange 事件句柄。在绑定属性中,将对属性的引用放置在花括号中。一旦绑定属性的值更改时,更改的值将复制到 cfformitem 标签中。因此,当在 userSelect 选择的项目更改时,将显示新项目的数据。当然,如果相关,您可以绑定到标签属性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值