我不是很熟悉使用ColdFusion,但我阅读过一些代码,看到这个:ColdFusion的循环行为
<CFLOOP INDEX="element" LIST="#FIELDNAMES#">
<CFSET REP_LIMIT = 0>
<CFSET E_VALUE = EVALUATE(#ELEMENT#)>
我有两个问题: 1)是设置E_VALUE是当前指数?如果是这样,评估有什么用?和2)这是对评估的一种很差和/或危险的用法吗?
我不是很熟悉使用ColdFusion,但我阅读过一些代码,看到这个:ColdFusion的循环行为
<CFLOOP INDEX="element" LIST="#FIELDNAMES#">
<CFSET REP_LIMIT = 0>
<CFSET E_VALUE = EVALUATE(#ELEMENT#)>
我有两个问题: 1)是设置E_VALUE是当前指数?如果是这样,评估有什么用?和2)这是对评估的一种很差和/或危险的用法吗?
评估主要用于评估动态命名变量,如表格变量。如果您不知道表单可能会提交哪些表单变量,则可以通过访问FORM.fieldnames来简单地遍历字段名。
(http://cfprimer.blogspot.com/2005/03/avoid-evaluate.html)。在编码CF的14年中,我看到它只用了少数几次。在我看来,以不知道提交哪些表单元素的方式来设置自己是一种糟糕的做法。
在您的例子,该指数设定为“元素”。因此,在循环时,“字段名称”列表中的任何内容都将是一个元素。
如果你想输出的字段名,你会做这样的事情:
<cfset fieldnames = "firstname,lastname,email">
<cfoutput>
<cfloop index="element" list="#fieldnames#">
#element#<br>
</cfloop>
</cfoutput>
本想这样的输出:
firstname
lastname
email
只是想出少量添加将是值得到你的可爱的解释,在那'
小字体错误,我认为你的意思是键入“它相当于FORM [元素] :) **编辑**糟糕,抱歉,我刚刚注意到以前的评论是从西蒙不是你@Evik。 – Leigh 2012-04-08 03:14:41
另外一个说明关于#2。是的,使用'evaluate'在这种情况下一般不提倡,因为它是没有必要的。所有的“后”变量是在系统结构'FORM'可用。所以字段与关联数组表示法很容易地访问,如西蒙提及。即,使用'FORM [元件]'而不是'FORM(“元件”)' – Leigh 2012-04-08 03:25:41
什么是代码的情况下?这看起来像一个非常糟糕的代码,但在某种情况下,它可能更有意义。例如,是否有围绕此代码的“查询循环”?在所有可能的情况下,Evaluate(Element)代码应该由范围引用(例如form [element],url [element],url/form引用的组合或queryvarname [element] [queryvarname.currentrow])替代。 – 2012-04-09 14:25:28