У меня есть CFC, что в основном теги, но я хотел бы использовать функцию structEach, которая использует замыкания, так что я открыл cfscript:ColdFusion - ссылаться на текущий компонент в Invoke cfscript в
<cfscript>
structEach(res,function(key,value){
/*<cfinvoke method="searchByNumberFromName" returnvariable="numRes">
<cfinvokeargument name="showActive" value="#formStruct.showActive#" />
<cfinvokeargument name="dsn" value="#c#" />
<cfinvokeargument name="cusNum" value="#res.c#" />
</cfinvoke>*/
var argsStruct=structNew();
structInsert(argsStruct,"showActive",formStruct.showActive);
structInsert(argsStruct,"dsn",key);
structInsert(argsStruct,"cusNum",value);
var holderObj=createObject("component","dupCheck");
numRes=invoke(holderObj,"searchByNumberFromName",argsStruct);
WriteDump(numRes,"browser","html",true,"numRes from namesearch");
}); //end structEach
</cfscript>
Закомментированный-аут код это тег, эквивалентный тому, что я хочу сделать (и c - это остаток от того, когда это было в том, что заставляло меня сходить с ума). После некоторого бесполезного Googling (я ЗНАЮ, как печатать, спасибо ...) Я попробовал для создания объекта с текущим компонентом ... который не имеет смысла, но что бы ни случилось, я был в отчаянии. Я также попытался указать «это» как компонент, но это тоже не сработает. может использоваться только с именем метода, но как использовать его эквивалент только с именем метода? Документы Adobe CFML для CF10 указывают, что имя компонента не является необязательным, как в тегах.
FWIW, я непосредственно копировал имя функции из ее объявления позже. Я использую onError в application.cfc для отправки по электронной почте мне самого исключения, и сообщение указывает путь к компоненту правильно, по крайней мере, с точки зрения того, как вы будете перемещаться там в Windows, если не в Интернете, (\ \ hq-devfs \ development $ \ ... \ myProject \ cfc \ dupCheck.cfc,) но он говорит, что метод не найден в компоненте ???
И да, все существует и т. Д. Оно взрывается при вызове.
В случае помогает, компонент создается таким образом:
<cfcomponent displayname="dupCheck" output="yes" namespace="http://schemas.xmlsoap.org/wsdl/http/" style="document" hint="">
Спасибо заранее!
EDIT: H'okay, после редактирования в свете приведенного ниже ответа, получилось: numRes=invoke("","searchByNumberFromName",argsStruct);
, так что «gatcha» здесь состоит в том, что вам все равно придется проходить в этой пустой строке; Документация Adobe не шутила, что это необязательно. (Если я опустил это, я получаю ошибку «Сложные типы объектов не могут быть преобразованы в простые значения», но пустая строка, по-видимому, по умолчанию используется для текущего CFC.)
Так что эквивалентно «это» в этом случае? Я хочу вызвать буквально несколько десятков строк в одном файле. И что должно быть var'd; это всего лишь короткая версия. –
Janet
Вам не нужно ничего класть, если он находится в одном компоненте. Это было бы просто numRes = searchByNumberFromName (и если вы передаете аргументы в том порядке, в котором они находятся в функции, их не нужно называть. –
Спасибо! D Выяснено, что для CF требуется пустая строка. ссылку на текущий компонент. – Janet