2012-07-13 294 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