2012-07-13 143 views
1

我有点熟悉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> 

回答

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

你保持一些旧的代码?否则,编写用户定义的函数比使用旧式自定义标签更容易使用和/或测试。

虽然自定义标签擅长处理生成标记,但它并不擅长返回变量。

您应该正在研究编写用户定义函数(UDF),而不是像在Java中所做的那样。

不说自定义标签不能返回值,它只是不如功能自然。

要从自定义标记返回值,您需要使用Caller作用域(它映射到调用者的variables作用域)。喜欢的东西...

<!--- customTag.cfm ---> 
<cfset caller[attributes.returnVar] = "some value"> 

并调用这样的customTag:

<cf_customTag returnVar="foo"> 

<cfdump var="#variables.foo#"> 

只要跟踪谁的来电,并设置主叫范围的值,可以在里面调用自定义标签自定义标签内部,自定义标签内部,自定义标签内...

如果您需要将自定义标签的输出捕获到var中,请将自定义标签调用包装在<cfsavecontent></cfsavecontent>中。

+3

大评论亨利。我想知道JMoy是否试图找出如何从cfscript *中调用其他自定义标记?不知道我有答案。我想实际上我会使用cffunction创建一个函数,调用他的第二个自定义标签 - 然后在cfscript中调用该函数......一种包装。 – 2012-07-13 17:48:02