首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >coldfusion 9动态调用方法

coldfusion 9动态调用方法
EN

Stack Overflow用户
提问于 2012-06-14 12:22:32
回答 3查看 966关注 0票数 2

我试图从传递到引用另一个对象的对象中的字符串构建一个方法调用。

通常,当调用对象时,我们编写如下代码:

代码语言:javascript
运行
复制
application.stObj.oNewsBusiness.getNews(argumentCollection=local.stArgs);

但是,我所做的是创建一个数组,该数组包含对象名、方法名和参数集合。

代码语言:javascript
运行
复制
<cfscript>
local.stArgs = {};
local.stArgs.nNewsID = 19;
local.stArgs.sAuthor = "John";

local.aData = [];
local.aData[1] = local.stArgs;
local.aData[2] = "stObj.oNewsBusiness";
local.aData[3] = "getNews";
</cfscript>

然而,我正在努力将所有这些重新组合成一个方法调用。

使用建议更新,但仍存在问题

而cfinvoke似乎适用于:

代码语言:javascript
运行
复制
<cfinvoke component="#application.stObj.oNewsBusiness#" method="#local.sMethod#" argumentcollection="#local.stArgs#" returnvariable="local.qData"></cfinvoke>

在做以下事情时,它不起作用:

代码语言:javascript
运行
复制
<cfscript>
local.stArgs = local.aData[1];
local.sObject = local.aData[2];
local.sMethod = local.aData[3];
</cfscript>
<cfinvoke component="application.#local.sObject#" method="#local.sMethod#" argumentCollection="#local.stArgs#" returnvariable="local.qData"></cfinvoke>

它会生成一个错误:

application.stObj.oNewsBusiness

找不到ColdFusion组件或接口

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-14 13:33:56

CFInvoke通常用于处理动态方法调用。

http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7e0a.html

CFInvoke有一个argumentcollection属性,因此您可以按照您习惯的方式传递参数。

票数 7
EN

Stack Overflow用户

发布于 2012-06-14 13:47:36

丹是对的,CFInvoke是走的路

代码语言:javascript
运行
复制
<cfinvoke component="#mycomponentname#" method="get"  arg1="#arg1#" arg2="#arg2#" arg3=..>
票数 2
EN

Stack Overflow用户

发布于 2012-06-14 14:57:59

代码语言:javascript
运行
复制
<cfinvoke component="application.#local.sObject#" method="#local.sMethod#"argumentCollection="#local.stArgs#" returnvariable="local.qData"></cfinvoke>

因为在组件变量周围没有#标记,所以更新将无法工作。

你可以

代码语言:javascript
运行
复制
<cfset local.componentName = "application." & local.sObject>
<cfinvoke component="#local.componentName#" method="#local.sMethod#"argumentCollection="#local.stArgs#" returnvariable="local.qData"></cfinvoke>

可能有一种内联方式来组合应用程序。但我不知道是怎么回事。

编辑:丹·威尔逊的评论在内联方面做得更好。

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

https://stackoverflow.com/questions/11032991

复制
相关文章

相似问题

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