2012-04-07 64 views
1

我不是很熟悉使用ColdFusion,但我阅读过一些代码,看到这个:ColdFusion的循环行为

<CFLOOP INDEX="element" LIST="#FIELDNAMES#"> 
    <CFSET REP_LIMIT = 0> 
    <CFSET E_VALUE = EVALUATE(#ELEMENT#)> 

我有两个问题: 1)是设置E_VALUE是当前指数?如果是这样,评估有什么用?和2)这是对评估的一种很差和/或危险的用法吗?

+0

什么是代码的情况下?这看起来像一个非常糟糕的代码,但在某种情况下,它可能更有意义。例如,是否有围绕此代码的“查询循环”?在所有可能的情况下,Evaluate(Element)代码应该由范围引用(例如form [element],url [element],url/form引用的组合或queryvarname [element] [queryvarname.currentrow])替代。 – 2012-04-09 14:25:28

回答

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 
+0

只是想出少量添加将是值得到你的可爱的解释,在那''将是等同于'',或可替代地只使用'E_VALUE' 。只是不值得添加一个单独的答案只是为了:) – 2012-04-07 22:45:35

+0

小字体错误,我认为你的意思是键入“它相当于FORM [元素] :) **编辑**糟糕,抱歉,我刚刚注意到以前的评论是从西蒙不是你@Evik。 – Leigh 2012-04-08 03:14:41

+1

另外一个说明关于#2。是的,使用'evaluate'在这种情况下一般不提倡,因为它是没有必要的。所有的“后”变量是在系统结构'FORM'可用。所以字段与关联数组表示法很容易地访问,如西蒙提及。即,使用'FORM [元件]'而不是'FORM(“元件”)' – Leigh 2012-04-08 03:25:41