2009-08-11 48 views
1

我调用CFC,CFC将有争论,像这样一组默认:您可以重新分配cfc中的默认<cfargument吗?

<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."> 

我想要做的就是这些论据并不requred(你可以通过所需=“没有看到“)但我想重新分配变量,如果需要的话。

因此,像:

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

但我不能够覆盖默认参数变量。有什么可以发现我做错了吗?

编辑:

我这样做,因为如果没有参数传递给CFC,我想创建一个。我想我应该cfset一个局部变量,如果参数没有长度?

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

回答

5

<cfparam>工作仅当该变量之前曾去过不确定。你的函数参数不是未定义的,它们恰好有它们的默认值。所以,你可以这样做:

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

这样,如果你不提供“选择”(或者故意将其设置为“默认”),它会被赋予某种动态的默认值。如果你需要的话,你仍然可以把它弄空。

除了“默认”之外,您还可以选择其他类型的不可思议的值,以便区分“不提供”和“空白”。 (有时我希望的ColdFusion将支持实际空值...)

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

或....

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

仅供参考,required="no"默认情况下,所以我一般不把它指定到已经详细的CFML。 :)

+0

在我问这个问题之前,我尝试了你之前提供的第一个选项。看起来,无论出于何种原因,如果有任何事情超出论据,函数就会错误地出错。为了将默认值设置为#getEmailTemplate.EMAIL_TEMPLATE_ADDRESS_FROM#我需要在参数上面运行查询。奇怪的行为,我从来没有遇到过这个问题,直到今天。 – jyoseph 2009-08-12 00:57:44

+0

好吧,这取决于它是否可以引用变量getEmailTemplate,无论它是什么。如果它是This或Variables作用域中的变量,那就没问题。 – Henry 2009-08-12 01:25:30

相关问题