2011-12-21 92 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)#" />