2013-07-01 3 views
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"); 

Однако, когда я выполняю приведенный выше код я получаю следующее сообщение об ошибке:

The ACTION argument passed to the do function is not of type string.

If the component name is specified as a type of this argument, it is possible that either a definition file for the component cannot be found or is not accessible.

The error occurred in C:/ColdFusion10/cfusion/wwwroot/fusebox5/myFusebox.cfc: line 301

Ошибка сообщается о целевом компоненте, так кажется, что функция вызывается, а аргументы передаются, но тип не сохраняется/не распознается как String.

Может ли кто-нибудь сообщить, что я делаю неправильно или как сохранить типы аргументов?

ответ

1

Да, я подозреваю, что вместо этого:

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

Вы имеете в виду это:

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

Ваш текущий код проходит аргументы в качестве первого аргумента, а не передавая их, как они были первоначально прошел.

+0

Конечно, школьник ошибка .. спасибо. – rhinds

Смежные вопросы