我有一个主要是标签的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中导航而言,如果没有在网上导航,(\ \ 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。)
答案 0 :(得分:2)
yourObject
将是包含方法searchByNumberFromName
numRes = yourObject.searchByNumberFromName(showActive = formStruct.showActive, dsn = c, cusNum = res.c);
如果这个功能正常,请确保var
numRes以保持线程安全