ColdFusion的使用自定义标签中自定义标签
问题描述:
我有点熟悉ColdFusion(从Java/OOP世界未来)ColdFusion的使用自定义标签中自定义标签
我有一个运行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>
答
这是我最终做的。在我的 “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>
答
你保持一些旧的代码?否则,编写用户定义的函数比使用旧式自定义标签更容易使用和/或测试。
虽然自定义标签擅长处理生成标记,但它并不擅长返回变量。
您应该正在研究编写用户定义函数(UDF),而不是像在Java中所做的那样。
不说自定义标签不能返回值,它只是不如功能自然。
要从自定义标记返回值,您需要使用Caller
作用域(它映射到调用者的variables
作用域)。喜欢的东西...
<!--- customTag.cfm --->
<cfset caller[attributes.returnVar] = "some value">
并调用这样的customTag:
<cf_customTag returnVar="foo">
<cfdump var="#variables.foo#">
只要跟踪谁的来电,并设置主叫范围的值,可以在里面调用自定义标签自定义标签内部,自定义标签内部,自定义标签内...
如果您需要将自定义标签的输出捕获到var中,请将自定义标签调用包装在<cfsavecontent>
</cfsavecontent>
中。
大评论亨利。我想知道JMoy是否试图找出如何从cfscript *中调用其他自定义标记?不知道我有答案。我想实际上我会使用cffunction创建一个函数,调用他的第二个自定义标签 - 然后在cfscript中调用该函数......一种包装。 – 2012-07-13 17:48:02