coldfusion - 如何有条件地将参数传递给 CFC 的实例?
问题描述
我目前正在使用该<cfinvoke>
标签来调用 CFC 并向它们传递参数。这真的很方便,因为我可以使用标签只传递我想要的参数,如下所示:
<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()
orcreateObject()
方法创建 CFC 的实例,然后在这个新创建的实例中调用方法,我将无法有条件地传递参数。我在运行时遇到错误。
<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>
)/>
如何使用上述方法有条件地传递参数?我是否应该在新实例上使用该方法 - 在这种情况下,当我可以坚持直接在实际 CFC 上使用时cfinvoke
,创建实例然后再次使用有什么意义?cfinvoke
cfinvoke
解决方案
您可以使用argumentCollection
. 参数集合是一个结构,每个键将被解构为单独的参数。
<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)>
推荐阅读
- apache-spark - 如何将具有相同/共享分区的 HDFS 文件块应用于同一数据节点上的不同文件/表
- angular - IonicRouteStrategy 和 RouteReuseStrategy
- node.js - Heroku 部署和流量
- php - 如何使用 ejabberd 一次性向我名册中的所有朋友发送消息或向我名册中的每个人广播消息?
- bigdata - 无法在 Vespa 的 Document 中动态添加 Postion(纬度和经度)类型字段
- json - 使用 Vue JS 从 API 中获取数据时遇到问题
- r - 排列 R 闪亮的侧边栏对象
- xamarin.android - 安装 Microsoft.Azure.Mobile.Client NuGet 包后生成错误
- java - 监控方法统计
- javascript - 在第一次渲染时获取 cookie 返回 undefined with universal-cookie