首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何有条件地将参数传递给一个CFC实例?

如何有条件地将参数传递给一个CFC实例?
EN

Stack Overflow用户
提问于 2018-10-31 00:55:11
回答 2查看 418关注 0票数 5

我目前正在使用<cfinvoke>标记来调用CFCs并向它们传递参数。这真的很方便,因为我可以使用标签来只传递我想要的参数,如下所示:

代码语言:javascript
复制
<cfinvoke component="pathtofolder.imagehandler" method="SomeMethod" argumentcollection="#VARIABLES#" returnvariable="ImageHandlerResult">
<cfif structkeyexists(ARGUMENTS, 'Argument1')>
<cfinvokeargument name="Parameter1" value="#ARGUMENTS.Argument1#" />
</cfif>
<cfif structkeyexists(ARGUMENTS, 'Argument2')>
<cfinvokeargument name="Parameter2" value="#ARGUMENTS.Argument2#" />
</cfif>
<cfif structkeyexists(ARGUMENTS, 'Argument3')>
<cfinvokeargument name="Parameter3" value="#ARGUMENTS.Argument3#" />
</cfif>
</cfinvoke>
<cfreturn ImageHandlerResult /> <!--- how do you get this using createObject/new method? --->

如果我使用new()createObject()方法创建一个CFC实例,然后在这个新创建的实例中调用这些方法,我就不能有条件地传递参数。我在运行时遇到错误。

代码语言:javascript
复制
<cfset ImageHandler = new pathtofolder.imagehandler()/>
<cfset ImageHandler.SomeMethod(
    <cfif StructKeyExists(ARGUMENTS, 'Argument1')>
    Parameter1 = ARGUMENTS.Argument1
    </cfif>
    <cfif StructKeyExists(ARGUMENTS, 'Argument2')>
    Parameter2 = ARGUMENTS.Argument2
    </cfif>
<cfif StructKeyExists(ARGUMENTS, 'Argument3')>
    Parameter3 = ARGUMENTS.Argument3
    </cfif>
)/>

如何使用上面的方法有条件地传递参数?我应该在新的实例上使用cfinvoke方法吗?在这种情况下,当我可以直接在实际的cfinvoke上使用cfinvoke时,创建一个实例然后再次使用CFC有什么意义呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-31 01:05:13

您可以使用argumentCollection。参数集合是一个结构,每个键都将被解构为单独的参数。

代码语言:javascript
复制
<cfset ImageHandler = new pathtofolder.imagehandler()>
<cfset args = {}>
<cfif StructKeyExists(ARGUMENTS, 'Argument1')>
  <cfset args.Parameter1 = ARGUMENTS.Argument1>
</cfif>
<cfif StructKeyExists(ARGUMENTS, 'Argument2')>
  <cfset args.Parameter2 = ARGUMENTS.Argument2>
</cfif>
<cfif StructKeyExists(ARGUMENTS, 'Argument3')>
  <cfset args.Parameter3 = ARGUMENTS.Argument3>
</cfif>

<cfset ImageHandler.SomeMethod(argumentCollection=args)>
票数 6
EN

Stack Overflow用户

发布于 2018-11-01 13:02:18

有一种类似的方法可以用来将条件attributes传递给ColdFusion标签。以下是<cfmail>标记的示例。

代码语言:javascript
复制
<cfset local.cfmailArguments = {
  to : 'toemail@test.com',
  from : 'email@test.com',
  subject : 'Passing custom smtp',
  type : 'html',
}>
<!--- There are custom mail settings available in session.SMTPDetails --->
<cfif structkeyexists(session, "SMTPDetails")>
  <cfset local.cfmailArguments['from'] = session.SMTPDetails.FromEmail>
  <cfset local.cfmailArguments['server'] = session.SMTPDetails.Server>
  <cfset local.cfmailArguments['username'] = session.SMTPDetails.UserName>
  <cfset local.cfmailArguments['password'] = session.SMTPDetails.Password>
  <cfset local.cfmailArguments['port'] = session.SMTPDetails.Port>
  <cfset local.cfmailArguments['usetls'] = session.SMTPDetails.TLS>
  <cfset local.cfmailArguments['usessl'] = session.SMTPDetails.SSL>
</cfif>
<cfmail attributecollection="#local.cfmailArguments#">
  Your mail content.
</cfmail>

而不是必须在每个条件下管理不同的标签。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53069310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档