2012-02-09 5 views
6

उदाहरण के लिए, यदि मेरे पास <cf_AppSwitch action="Check"> जैसे कस्टम टैग हैं तो मेरी धारणा AppSwitch(action="Check") जैसी कुछ होगी, लेकिन मुझे यकीन नहीं है कि सीएफ़ कस्टम टैग के रूप में इसे हल कर सकता है।क्या मैं cfscript में एक कस्टम टैग कॉल कर सकता हूं?

अन्य समाधान जो मैं सोच सकता हूं, एक रैपर फ़ंक्शन लिखना और मेरा कस्टम टैग कॉल करना होगा, लेकिन यह अनावश्यक लगता है।

ऐसा लगता है कि मैं एक और अधिक जटिल समस्या को बढ़ा रहा हूं, इसलिए किसी भी अंतर्दृष्टि की सराहना की जाएगी (यहां तक ​​कि यह क्यों समर्थित नहीं है/नहीं होना चाहिए)।

उत्तर

6

मान लीजिए कि आप एडोब सीएफ़ का उपयोग कर रहे हैं, दुर्भाग्य से उत्तर नहीं है। आपको एक रैपर फ़ंक्शन लिखना है जो CFML- आधारित है। उदाहरण के लिए:

<cffunction name="myCustomTag"> 
    <cfset var returnVal = ""> 
    <cfsavecontent variable="returnVal"><cf_myCustomTag attributeCollection=arguments></cfsavecontent> 
    <cfreturn returnVal> 
</cffunction> 

<cfscript> 
myCustomTag(a="b"); 
</cfscript> 

अब, अगर आप Railo उपयोग कर रहे हैं, तो आप इस्तेमाल कर सकते हैं cfscript equivalent to the <cfmodule> tag:

<cfscript> 
    module name="myCustomTag"; 
</cfscript> 
+0

धन्यवाद जेक, बस जो मैं खोज रहा था। – ryankeairns

+3

कुछ लोग तर्क देंगे कि यूआई आधारित कार्यों के लिए टैग अच्छे हैं और घटक मॉडल/सेवाओं के लिए बेहतर अनुकूल हैं। इसलिए यह दुर्लभ है कि किसी को ऐसी चीज करने की आवश्यकता होगी। –

+0

वैध बिंदु @ टोडड शार्प, मैं एफडब्लू/1 के साथ एक ऐप दोबारा लिख ​​रहा हूं और कई अन्य ऐप्स द्वारा उपयोग किए जाने वाले पूर्व-मौजूदा कस्टम टैग का एक समूह से निपटने के लिए ... आप सही हैं, अगर उचित है समय मैं उन्हें घटकों के रूप में फिर से लिखूंगा। – ryankeairns

11

अद्यतन 2:

यहाँ एक भी badder गधा (या यह बुरा है asser?) रास्ता। चेतावनी: नीचे अप्रलेखित विशेषताएं (लेकिन अभी भी शांत):

<cfif thisTag.executionMode eq "start"> 
    <cfparam name="attributes.name" default="Dude" /> 
    <cfparam name="attributes.result" type="variablename" default="result" /> 
    <cfset caller[attributes.result] = "Hello, " & attributes.name & "!!" /> 
</cfif> 

तो टैग का परिणाम विशेषता एक चर के नाम का कॉलर में स्थापित किया जाएगा उम्मीद:

कस्टम टैग मान लें तो की तरह एक मान देता है । अब नीचे दी गई विधि का उपयोग करके हम उस परिणाम को cfscript के माध्यम से एक्सेस कर सकते हैं।

<cfscript> 

test = createObject("java", "coldfusion.tagext.lang.ModuleTag"); 
test.setPageContext(getPageContext()); 
test.setTemplatePath(expandPath('echo.cfm')); 
test.setAttributeCollection({name="Todd Sharp", result="testResult"}); 
test.doStartTag(); 
test.doEndTag(); 
test.releaseTag(); 

writeDump(testResult); 

</cfscript> 

अद्यतन:

नीचे समाधान किसी अवांछित पक्ष प्रभाव हो सकता है। यदि आपका कस्टम टैग एक मान देता है तो आपको उस तक पहुंच नहीं होगी क्योंकि टैग को घटक से कहा जाता है क्योंकि रिटर्न वैरिएबल घटक के चर के दायरे में डाल दिया जाता है, कॉलिंग टेम्पलेट नहीं। बेशक, यदि आप एक मूल्य वापस कर रहे हैं तो आपको शायद सीएफसी का उपयोग करना चाहिए (जैसा कि मैंने उपरोक्त टिप्पणी की है) तो अपने जोखिम पर उपयोग करें।

कैसे इस दृष्टिकोण (जैक के से संशोधित) के बारे में:

CustomTagProxy.cfc:

<cfcomponent> 

    <cffunction name="onMissingMethod" output="false"> 
     <cfargument name="missingMethodName" type="string"/> 
     <cfargument name="missingMethodArguments" type="struct"/> 

      <cfset var returnVal = ""> 
      <cfsavecontent variable="returnVal"><cfmodule template="#arguments.missingMethodName#.cfm" attributecollection="#arguments.missingMethodArguments#" /></cfsavecontent> 
      <cfreturn returnVal> 
    </cffunction> 

</cfcomponent> 

echo.cfm:

<cfif thisTag.executionMode eq "start"> 
    <cfparam name="attributes.name" default="Dude" /> 
    <cfoutput>Hello, #attributes.name#!!</cfoutput> 
</cfif> 

time.cfm:

<cfif thisTag.executionMode eq "start"> 
    <cfoutput>It is now #now()#.</cfoutput> 
</cfif> 

index.cfm:

<cfscript> 
proxy = new CustomTagProxy(); 
echoTest = proxy.echo(name="Todd"); 
timeTest = proxy.time(); 

writeOutput(echoTest); 
writeOutput("<br />"); 
writeOutput(timeTest); 
</cfscript> 
+1

+1। स्लिम विचार। – Leigh

+0

coldfusion.tagext.lang.ModuleTag ftw –

+0

यहां अन्य टैग्स का एक टन है जो आप इस विधि का उपयोग कर cfscript में कर सकते हैं –

संबंधित मुद्दे