ColdFusion - 引用 cfscript 调用中的当前组件



我有一个CFC,它主要是标签,但我想使用structEach函数,它使用闭包,所以我打开了一个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是一个让我抓狂的遗留代码。)在谷歌上搜索了一些毫无帮助的东西后,(我知道如何键入,谢谢…)我试图用当前组件创建一个对象。。。这毫无意义,但不管怎样,我绝望了。我还尝试将"this"指定为组件,但这也不起作用。可以仅与方法名一起使用,但如何仅与方法名称一起使用其等效项?Adobe针对CF10的CFML文档表明,组件名称不像标签中那样是可选的。

FWIW,我稍后直接从它的声明中复制粘贴了函数的名称。我在application.cfc中使用onError通过电子邮件向自己发送抛出的异常,消息正确地列出了组件的路径,至少在Windows中(如果不是在web上)如何导航,(\\hq devfs\development$\…\myProject\cfc\dupCheck.cfc,)但据说在组件中找不到该方法???

是的,一切都存在等等。它在调用时爆炸了。

如果它有帮助,组件是这样创建的:

<cfcomponent displayname="dupCheck" output="yes" namespace="http://schemas.xmlsoap.org/wsdl/http/" style="document" hint="">

提前感谢!

编辑:H'okay,根据下面的答案进行编辑后,正确的答案是:numRes=invoke("","searchByNumberFromName",argsStruct);,所以这里的"gatcha"是你仍然必须传入那个空字符串;Adobe的文档并不是在开玩笑说这是可选的。(如果我省略它,我会得到"复杂对象类型无法转换为简单值"的错误,但一个空字符串显然默认为当前CFC。)

yourObject将是包含方法searchByNumberFromName的对象的名称

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

如果这是在功能中,请确保varnumRes保持线程安全

最新更新