嘿伙计们,我在处理动态变量名称时遇到了一些问题。发生的事情是我有一个CFC,它使用表中的一些数据为我构建表单的一部分。然后cfc将表单的代码作为字符串发送回页面。我需要为这些表单字段赋值,以便人们不会覆盖数据。我在cfc中的函数中提取数据。所以我试图将这个动态变量抛入字符串中,这对我来说很糟糕。我一直收到错误说
A CFML variable name cannot end with a "." character.
这是我正在使用的代码,它给了我错误。我对编程没有太多经验我没有这么做太久。所以任何输入都会很棒。
<!--- ================================================================== --->
<cfargument name="catFormQuery" type="query" required="yes">
<cfargument name="listingID" required="yes">
<cfset var getListingInformation = "">
<cfset var returnVar = "">
<cfset var fieldValue = "">
<cfset var catNameNoSpace = "">
<!--- get the listing Information --->
<cfquery name="getListingInformation" datasource="backEndDSN">
Select * from listings
where listingID = #arguments.listingID#
</cfquery>
<cfoutput query="arguments.catFormQuery">
<!---====================--->
<!--- Set catNameNoSpace --->
<!---====================--->
<cfset catNameNoSpace = replaceNoCase(arguments.catFormQuery.catName, " ", "_")>
<!---==========--->
<!--- for text --->
<!---==========--->
<cfif arguments.catFormQuery.catType eq 'text'>
<cfset returnVar = returnVar & #arguments.catFormQuery.catName# & ": <input type='text' name='#catNameNoSpace#' value=" & getListingInformation.#catNameNoSpace# & "><br />">
</cfif>
所以,无论如何,如果你能给我任何意义重大的意见或建议。非常感谢。
代码就在底部。
<cfset returnVar = returnVar & #arguments.catFormQuery.catName# & ": <input type='text' name='#catNameNoSpace#' value=" & getListingInformation.#catNameNoSpace# & "><br />">
答案 0 :(得分:13)
这肯定不起作用,它不是有效的CFML:
getListingInformation.#catNameNoSpace#
Evaluate是魔鬼,但您可以使用数组样式语法。唯一需要注意的是,您需要明确指定要从中获取值的行(如果查询没有行,则会出错)。
getListingInformation[catNameNoSpace][1]
答案 1 :(得分:2)
Sixten的答案有一个你可以使用的语法,但你仍然需要注意变量名中的非法字符,如其他地方所述。变量的最终指南如下:http://www.depressedpress.com/Content/Development/ColdFusion/Articles/Variables/Index.cfm,尤其是此部分http://www.depressedpress.com/Content/Development/ColdFusion/Articles/Variables/NotationIndexed.cfm
答案 2 :(得分:1)
稍微不同但对看这个的人可能有用:你也可以使用变量[&#34; staticPartOfVariableName#DynamicPartOfVariableName#&#34;]。
答案 3 :(得分:0)
好吧我想我明白了。我不喜欢我不得不这样做。
evaluate("getListingInformation.#catNameNoSpace#")
我之前听说过使用评估很慢而且不是很干净。有更好的选择吗?