通过代理调用函数

时间:2013-07-01 20:40:12

标签: coldfusion

我正在尝试创建一个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。

任何人都可以建议我做错了什么或如何保存参数类型?

1 个答案:

答案 0 :(得分:1)

是的,我怀疑不是这样的:

var local.returnVal = local.function( arguments );

你的意思是:

var local.returnVal = local.function(argumentCollection=arguments );

您当前的代码将参数作为第一个参数传递,而不是像最初传入的那样传递它们。