2009-08-11 71 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

相關問題