我不是很熟悉使用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