我有一个CFC这主要是标签,但我想用structEach功能,它采用封闭的,所以我开了一个CFSCRIPT:ColdFusion的 - 在CFSCRIPT的invoke参考电流分量
<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”作为组件,但这也行不通。只能使用方法名称,但如何使用它的等价物只有方法名称?用于CF10的Adobe 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。)
那么什么是相当于“这”在这种情况下?我想调用的在同一个文件中几乎是十几行。什么需要var'd是;这只是简短的版本。 –
Janet
如果它在同一个组件中,则不需要为它添加任何内容。它只是numRes = searchByNumberFromName(如果你按顺序传入参数,它们不需要命名)。 –
谢谢!:D把它表示出来; CF需要一个空字符串引用当前组件。 – Janet