2012-04-07 65 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