我正在尝试创建一个cf组件来代理另一个组件。目前代码如下所示:(为了示例而剥离):
public MyFuseboxProxy function init( Required any myFb ){
variables.myFusebox = arguments.myFb;
return this;
}
this.do = variables.proxy;
private any function proxy(){
var local.functionName = getFunctionCalledName();
var local.function = variables.myFusebox[local.functionName];
var local.returnVal = local.function( arguments );
...
}
正如你所看到的,它非常直接。我在初始化时传入我的目标对象,然后使用代理方法拦截函数调用。我正在使用cfscript,并且不想使用cfinvoke,所以我正在使用这种方法。
然后我按如下方式调用代理:
var local.proxy = new ab.MyFuseboxProxy( myFusebox );
var local.dump = local.proxy.do ( action='display.body', contentvariable="body" );
但是,当我执行上面的代码时,我收到以下错误:
传递给do函数的ACTION参数不是string类型。
如果组件名称被指定为此参数的类型,则组件的定义文件可能不是 发现或无法访问。
错误发生在C:/ColdFusion10/cfusion/wwwroot/fusebox5/myFusebox.cfc:第301行
在目标组件上报告错误,因此看起来函数正在调用,并且参数传递,但该类型未被保留/识别为String。
任何人都可以建议我做错了什么或如何保存参数类型?
答案 0 :(得分:1)
是的,我怀疑不是这样的:
var local.returnVal = local.function( arguments );
你的意思是:
var local.returnVal = local.function(argumentCollection=arguments );
您当前的代码将参数作为第一个参数传递,而不是像最初传入的那样传递它们。