ColdFusion在自定义标记内使用自​​定义标记

时间:2012-07-13 16:59:23

标签: coldfusion custom-tags

我对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>

2 个答案:

答案 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>