首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ColdFusion9 UDF嵌套调用

ColdFusion9 UDF嵌套调用
EN

Stack Overflow用户
提问于 2016-07-01 17:54:03
回答 1查看 51关注 0票数 1

我有一个在CF9中创建的cfm文件。它有7个<cfinvoke>语句,除了methodreturnvariable之外,所有语句都是相同的。有没有一种方法可以将其放入一个函数或循环中,以缩短我的代码并仍然工作呢?

示例:

代码语言:javascript
复制
<cfsilent>
<cfinvoke component="financial.financial" method="getExecSummary" returnvariable="qExecSummary">
    <cfinvokeargument name="level" value="#URL.level#" />
    <cfinvokeargument name="stateGM" value="#URL.stateGM#" />
</cfinvoke>
<!---Added this to test if I can get more than one sheet to the Workbook--->
<cfinvoke component="financial.financial" method="getExecSummary331" returnvariable="qExecSummary331">
    <cfinvokeargument name="level" value="#URL.level#" />
    <cfinvokeargument name="stateGM" value="#URL.stateGM#" />
</cfinvoke>
</cfsilent>

这不管用:

代码语言:javascript
复制
<cffunction name="getSummary" output=true>
    <cfargument name="method" required="true">
    <cfargument name="returnvariable" required="true">
    <cfargument name="level" required="true">
    <cfargument name="stateGM" required="true">

    <cfinvoke component="financial.financial" method="#method#" returnvariable="#returnvariable#">
        <cfinvokeargument name="level" value="#level#" />
        <cfinvokeargument name="stateGM" value="#stateGM#" />
    </cfinvoke>

    <cfreturn #returnvariable#> 
</cffunction>


<cfset getSummary("getExecSummary","qExecSummary","#URL.level#","#URL.stateGM#")>

如果有人能给我指明正确的方向?如果这是可能的话。我一直在努力寻找做这件事的信息,但我还没有看到任何信息。

我已经阅读了,寻找帮助。我还发现了一些也没有帮助的帖子。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-01 18:17:07

使用createObject(“组件”)比使用cfinvoke更简单。只需创建组件的实例即可。然后调用适当的方法并在所需变量中捕获结果:

代码语言:javascript
复制
<!--- separated calls for readability -->
<cfset comp = createObject("component", "path.to.YourComponent")>
<cfset result = comp.firstMethod( "value1", "value2")>

如果这些方法都是无状态的(并限定了适当的作用域),您可以简单地对所有方法调用重用相同的实例:

代码语言:javascript
复制
<cfset comp = createObject("component", "path.to.YourComponent")>
<cfset result1 = comp.firstMethod( "value1", "value2" )>
<cfset result2 = comp.secondMethod( "value1", "value2" )>
<cfset result3 = comp.thirdMethod( "value1", "value2" )>

而且,正如约翰希望的那样,评论中提到

在CF9+中,如果您喜欢这样的话,也可以使用new操作符: ) 值得注意的是,如果您有init方法,new操作符也会尝试在您的CFC中调用init方法--尽管它不需要一个方法才能工作,只是它的工作原理与: createObject(“组件”,"path.to.YourComponent")

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

https://stackoverflow.com/questions/38151353

复制
相关文章

相似问题

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