2011-12-21 90 views
0
<cfif ISDEFINED("CALLER.VARIABLES.STRFUNCNAME")> 
    <cfparam name="strFuncName" default="#EVALUATE(CALLER.VARIABLES.STRFUNCNAME)#" /> 
<cfelse> 
    <cfparam name="strFuncName" default="" /> 
</cfif> 

此代碼位於我們的CustomTags之一中,並在EVALUATE行上發生錯誤。我不確定這甚至是可能的。ColdFusion:isdefined,但引發未定義錯誤

我可以從調用頁面做到這一點,看看該變量的定義:

<cfset VARIABLES.strFuncName = "strFuncName#intModule#"> <!--- intModule = 1188 ---> 
#VARIABLES.strFuncName#: #EVALUATE(VARIABLES.strFuncName)# <!--- strFuncName1188: Main ---> 
<CF_CUSTOMTAG> <!--- Tell me Variable strFuncName1188 is undefined. ---> 

回答

3

你的代碼改成這樣:

<cfparam name="strFuncName" default="#EVALUATE('CALLER.VARIABLES.STRFUNCNAME')#" /> 
+0

注意評估呼叫 – 2011-12-21 18:40:56

+0

這工作中的單引號。你能解釋一下嗎?我還發現,以另一種方式工作(請參閱我的文章)... – Brad 2011-12-21 18:49:27

+0

它的工作原理是評估採用傳遞給它的字符串,並嘗試將該字符串解釋爲動態表達式。使用引號,要傳遞的字符串是變量的名稱。沒有引號,字符串就是變量的內容。老實說,它看起來並不像你甚至需要eval,因爲字符串是靜態的。 – 2011-12-21 18:52:50

0

終於找到它了...

來電.VARIABLES.STRFUNCNAME只返回「strFuncName ####」。因此,對此進行評估的是在當前處理範圍內查找變量「strFuncName ####」,而不是在CALLER上。

我改變了cfparam以下內容並開始工作:

<cfparam name="strFuncName" default="#EVALUATE("CALLER." & CALLER.VARIABLES.STRFUNCNAME)#" />