अद्यतन 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>
स्रोत
2012-02-09 22:13:44
धन्यवाद जेक, बस जो मैं खोज रहा था। – ryankeairns
कुछ लोग तर्क देंगे कि यूआई आधारित कार्यों के लिए टैग अच्छे हैं और घटक मॉडल/सेवाओं के लिए बेहतर अनुकूल हैं। इसलिए यह दुर्लभ है कि किसी को ऐसी चीज करने की आवश्यकता होगी। –
वैध बिंदु @ टोडड शार्प, मैं एफडब्लू/1 के साथ एक ऐप दोबारा लिख रहा हूं और कई अन्य ऐप्स द्वारा उपयोग किए जाने वाले पूर्व-मौजूदा कस्टम टैग का एक समूह से निपटने के लिए ... आप सही हैं, अगर उचित है समय मैं उन्हें घटकों के रूप में फिर से लिखूंगा। – ryankeairns