0

我正在尝试创建一个 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 参数不是字符串类型。

如果将组件名称指定为此参数的类型,则可能无法找到组件的定义文件或无法访问。

错误发生在 C:/ColdFusion10/cfusion/wwwroot/fusebox5/myFusebox.cfc: line 301

该错误报告在目标组件上,因此似乎正在调用该函数,并且传递了参数,但该类型并未被保留/识别为字符串。

谁能建议我做错了什么或如何保留参数类型?

4

1 回答 1

1

是的,我怀疑不是这个:

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

你是这个意思:

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

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

于 2013-07-01T20:49:17.140 回答