1

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

2 回答 2

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>.

于 2012-07-13T17:17:12.567 回答
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>
于 2012-07-17T13:05:02.967 回答