2015-04-22 1 views
1

У меня есть 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.)

ответ

2

yourObject будет именем объекта, который содержит метод searchByNumberFromName

numRes = yourObject.searchByNumberFromName(showActive = formStruct.showActive, dsn = c, cusNum = res.c); 

Если это функция убедитесь, что вы var numRes держать его поточно

+0

Так что эквивалентно «это» в этом случае? Я хочу вызвать буквально несколько десятков строк в одном файле. И что должно быть var'd; это всего лишь короткая версия. – Janet

+0

Вам не нужно ничего класть, если он находится в одном компоненте. Это было бы просто numRes = searchByNumberFromName (и если вы передаете аргументы в том порядке, в котором они находятся в функции, их не нужно называть. –

+0

Спасибо! D Выяснено, что для CF требуется пустая строка. ссылку на текущий компонент. – Janet