2009-08-11 3 views
1

Ich bin ein cfc Aufruf hat die cfc einen Standardsatz von Argumenten wie so:Können Sie den Standard <cfargument in einem cfc neu zuweisen?

<cfargument name="EMAIL_TEMPLATE_CODE" type="string" required="yes" hint="EMAIL_TEMPLATE_CODE is required."> 
<cfargument name="EMAIL_TEMPLATE_SUBJECT" default="" type="string" required="no" hint="EMAIL_TEMPLATE_SUBJECT is NOT required."> 
<cfargument name="EMAIL_TEMPLATE_BODY" default="" type="string" required="no" hint="EMAIL_TEMPLATE_BODY is NOT required."> 

Was diese Argumente machen tun, ich mag nicht requred (wie Sie von required = "no sehen "), aber ich möchte die Argumentvariable bei Bedarf neu zuweisen.

So etwas wie:

<cfargument name="EMAIL_TEMPLATE_CODE" type="string" required="yes" hint="EMAIL_TEMPLATE_CODE is required."> 
<cfargument name="EMAIL_TEMPLATE_SUBJECT" default="" type="string" required="no" hint="EMAIL_TEMPLATE_SUBJECT is NOT required."> 
<cfargument name="EMAIL_TEMPLATE_BODY" default="" type="string" required="no" hint="EMAIL_TEMPLATE_BODY is NOT required."> 

<cfinvoke component="#Request.CFCPath#.email_template" method="getEmailTemplate" returnvariable="getEmailTemplate"> 
    <cfinvokeargument name="EMAIL_TEMPLATE_CODE" value="#ARGUMENTS.EMAIL_TEMPLATE_CODE#"> 
</cfinvoke> 

<cfif getEmailTemplate.RecordCount> 
    <cfparam name="ARGUMENTS.EMAIL_TEMPLATE_SUBJECT" default="#getEmailTemplate.EMAIL_TEMPLATE_SUBJECT#" type="string"> 
    <cfparam name="ARGUMENTS.EMAIL_TEMPLATE_BODY" default="#getEmailTemplate.EMAIL_TEMPLATE_BODY#" type="string"> 
</cfif> 

Aber ich bin nicht in der Lage, die Standardargumente Variable außer Kraft zu setzen. Kannst du irgendwas ausmachen, dass ich falsch liege?

EDIT:

ich dies zu tun, denn wenn kein Argument für die cfc übergeben, und ich habe erstellt werden soll. Ich denke, ich sollte eine lokale Variable cfset, wenn das Argument keine Länge hat?

<cfif Len(ARGUMENTS.EMAIL_TEMPLATE_ADDRESS_FROM)> 
    <cfset EMailTemplateAddressFrom = ARGUMENTS.EMAIL_TEMPLATE_ADDRESS_FROM> 
<cfelse> 
    <cfset EMailTemplateAddressFrom = getEmailTemplate.EMAIL_TEMPLATE_ADDRESS_FROM>   
</cfif> 

Antwort

5

<cfparam> funktioniert nur, wenn die Variable vor undefined war. Ihre Funktionsparameter sind nicht undefiniert, sie haben nur ihre Standardwerte. So könnten Sie dies tun:

<cffunction name="foo"> 
    <cfargument name="arg" type="string" required="yes"> 
    <cfargument name="opt" default="default" type="string" required="no"> 

    <cfif arguments.opt eq "default"> 
    <cfset arguments.opt = "whatever dynamic value"> 
    </cfif> 
</cffunction> 

Auf diese Weise, wenn Sie nicht liefern „opt“ (oder bewusst setzt sie auf „default“), erhalten sie eine Art von dynamischen Standardwert zugeordnet. Und Sie können es immer noch leer machen, wenn Sie brauchen.

Anstelle von "default" können Sie einen anderen unwahrscheinlichen Wert wählen, mit dem Sie zwischen "nicht geliefert" und "leer" unterscheiden können. (Manchmal wünsche ich Coldfusion tatsächliche Nullwerte unterstützen würde ...)

2
<cfargument name="EMAIL_TEMPLATE_CODE" type="string" 
    default="#getEmailTemplate.EMAIL_TEMPLATE_ADDRESS_FROM#"> 
<cfargument name="EMAIL_TEMPLATE_SUBJECT" default="" type="string"> 
<cfargument name="EMAIL_TEMPLATE_BODY" default="" type="string"> 

oder ....

<cfargument name="EMAIL_TEMPLATE_CODE" type="string"> 
<cfargument name="EMAIL_TEMPLATE_SUBJECT" default="" type="string"> 
<cfargument name="EMAIL_TEMPLATE_BODY" default="" type="string"> 
<cfif NOT isDefined("arguments.EMAIL_TEMPLATE_CODE")> 
    <cfset arguments.EMAIL_TEMPLATE_CODE = getEmailTemplate.EMAIL_TEMPLATE_ADDRESS_FROM> 
</cfif> 

FYI, required="no" standardmäßig, so dass ich angeben, in der Regel nicht an die bereits ausführliche CFML. :)

+0

Ich habe versucht, die erste Option, die Sie zuvor zur Verfügung gestellt, bevor ich die Frage stellte. Es scheint, dass die Funktion aus irgendeinem Grund fehlschlägt, wenn etwas über den Argumenten liegt. Um den Standardwert als # getEmailTemplate.EMAIL_TEMPLATE_ADDRESS_FROM # zu setzen, musste ich die Abfrage über den Argumenten ausführen. Seltsames Verhalten und ich habe dieses Problem bis heute nicht kennengelernt. – jyoseph

+0

Nun, das hängt davon ab, ob es sich auf die Variable getEmailTemplate beziehen kann, was auch immer es ist. Wenn es eine Variable im Bereich Dies oder Variablen ist, wird es in Ordnung sein. – Henry