很多来源调用单个资源,通常通过<cfthread ..>
,但有些使用<cfinclude ..>
。cfparam'd变量如何定义?
理想情况下,代码查找变量previous_state
。如果通过了一些变体,那么资源将尝试使用它们。
我收到此错误:
Variable PREVIOUS_STATE is undefined.
线记录指向<cfif ..>
在此块的代码。
<cfparam name= "previous_state"
default= "" />
<cfif isSimpleValue(previous_state)
and len(previous_state) eq 0>
<cfset previous_state= previousState />
</cfif>
我的问题是previous_state怎么能被undefined?
我可以在应用程序中复制它,但它是一个相当复杂的使用线程的代码链。也许这个参考被垃圾收集器吃掉了?
我无法在简单的代码段中复制它。我试过设置变量返回一个函数returnType= "void"
,但<cfparam ..>
似乎将其重置为空字符串。
下面是完整的代码上下文。我删除了无关的变量等。
// Page
oComponent.foo();
// Component.foo()
<cfset var local= {
previous_state= QueryNew("foo" , "varchar")
} />
<cfthread name= "foo_#createUUID()#"
previousState= "#local.previous_state#">
<!--- Module does unrelated things... --->
<cfmodule template= "some_module.cfm">
<cfoutput>
// unrelated things
<cfparam name= "previous_state"
default= "" />
<!--- Next line is throwing error. --->
<cfif isSimpleValue(previous_state)
and len(previous_state) eq 0>
<cfset previous_state= previousState />
</cfif>
</cfoutput>
</cfmodule>
</cfthread>
我现在想cfparam
试图使用不再受这个代码执行时就存在一个范围。
上面的代码是否定义在CTHREAD标签中? –
是的。它看起来像线程内的一个范围问题。 –
绝对是一个范围界定问题。我并没有乱用cfthread,但我相信previous_state应该在属性范围(attribute.previous_state)中。 – webRat