我对ColdFusion有点新手(来自Java / OOP世界)
我有一个自定义标记,它在cfscript中运行一些东西并输出一个值。我想让这个自定义标签(让我们称之为A)调用另一个自定义标签(让我们称之为B,一种具有某种“静态”功能的更通用的自定义标签),并带有一定的参数。
如何从A中拨打B? 如何在A?
中使用B中的返回值A的代码
<cfscript>
//Call to other custom tag here?:
//foo = [CUSTOMTAG param="stuff"];
value = foo;
</cfscript>
<cfoutput>#value#</cfoutput>
答案 0 :(得分:6)
你要保留一些旧代码吗?否则,编写用户定义的函数将比使用旧式自定义标记更容易使用和/或测试。
虽然自定义标记擅长生成标记,但它在返回变量方面并不擅长。
您应该考虑编写用户定义的函数(UDF),就像在Java中一样。
不是说自定义标签不能返回值,它不像函数那么自然。
要从自定义标记返回值,您需要使用Caller
范围(映射到调用方的variables
范围)。有点像...
<!--- customTag.cfm --->
<cfset caller[attributes.returnVar] = "some value">
并像这样调用customTag:
<cf_customTag returnVar="foo">
<cfdump var="#variables.foo#">
只需跟踪调用者是谁,并在调用者范围内设置值,您就可以在自定义标记内,自定义标记内调用自定义标记内的自定义标记...
如果您需要将自定义标记的输出捕获到var中,请将自定义标记调用包含在<cfsavecontent>
</cfsavecontent>
中。
答案 1 :(得分:1)
这就是我最终做的事情。在我的“A”文件中(回想一下,A调用B):
<cfscript>
b = createObject("component","bName");
returnVal = b.method("paramInfo");
</cfscript>
在我的“B”档案中
<cfcomponent displayname="bName">
<cffunction name="method" returntype="string" output="false">
<cfargument name="paramName" required="yes" type="string">
<cfscript>
returnVal = paramName;
</cfscript>
<cfreturn returnVal>
</cffunction>
</cfcomponent>