好的,这里是 CF/AJAX 新手。我正在构建的是一个基本的数据库驱动的库存清单,对于每个项目,它都显示:
- 类别
- 库存编号 (ID)
- 项目名
- 物品图片
- 颜色
- 一个复选框(无论是否有库存 - 默认为“0”)
我正在使用 cflayoutareas 将库存分成可折叠的手风琴,每个类别都在其自己的部分中。目标是有一个简单的清单,当您检查一个项目并更新数据库并保留您在当前手风琴/列表中的位置时,“灰色”每个项目。库存清单可能很长,有 200 多件物品,因此我寻求使用 AJAX 干净地完成这项工作。
我让它半工作,但它非常粗糙,因为它依赖于每次检查的发布/重新加载。我知道有一种简单而优雅的方式来使用 AJAX 进行编码,但我无法从各种 cfajax / bind / etc 示例中将它拼凑在一起。也许jQuery在这里会有所帮助?没有把握。任何建议或方向表示赞赏。
这是我到目前为止的草率版本:
要更新数据库并重新加载列表:
<cfif WhatsChecked NEQ "">
<cftransaction>
<cfquery name="UpdateChecks" datasource="#application.dsn#">
UPDATE inventorychecklist
SET Checked = "1"
WHERE ID IN (<cfqueryparam value="#FORM.WhatsChecked#" cfsqltype="cf_sql_varchar" list="true">)
</cfquery>
<cfquery name="UpdateChecks0" datasource="#application.dsn#">
UPDATE inventorychecklist
SET Checked = "0"
WHERE ID NOT IN (<cfqueryparam value="#FORM.WhatsChecked#" cfsqltype="cf_sql_varchar" list="true">)
</cfquery>
</cftransaction>
<cfquery name="LoadInventory" datasource="#application.dsn#">
SELECT * FROM inventorychecklist
WHERE AccountNumber = <cfqueryparam value="#Session.AccountNumber#" CFSQLType="cf_sql_varchar">
order by Category
在正文中形成(发布到自身)以遍历库存(每个类别组)并显示项目/复选框,如果已选中则将 tr 灰显:
<cfform name="MAINFORM" action="checklist.cfm" method="post">
<cflayout name="MainChecklist" type="accordion" width="640">
<cfoutput query="LoadInventory" group="Category">
<cflayoutarea title="#Category#, qty:#totalCount#" align="left">
Category: #Category#"
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td>stock number (ID)</td>
<td>item name</td>
<td>item picture</td>
<td>color</td>
<td>in stock?</td>
</tr>
<cfoutput>
<!--- If item is checked off, gray out the row --->
<cfif "#LoadInventory.Checked#" EQ 1>
<tr bgcolor="##333333">
<cfelse>
<tr>
</cfif>
<td>#ID#</td>
<td>#LoadInventory.ItemName#</td>
<td><img src="images/#LoadInventory.Category#/#LoadInventory.Item#.jpg"></td>
<td>#LoadInventory.Color#</td>
<td>
<input type="checkbox" name="WhatsChecked" value="#ID#" <cfif "#LoadInventory.Checked#" EQ 1>checked="checked"</cfif> onclick="this.form.submit();">
</td>
</tr>
</cfoutput>
</table>
</cflayoutarea>
</cfoutput>