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

时间:2015-04-22 21:08:52

标签: coldfusion coldfusion-10 cfml cfc

我有一个主要是标签的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。)

1 个答案:

答案 0 :(得分:2)

yourObject将是包含方法searchByNumberFromName

的对象的名称
numRes = yourObject.searchByNumberFromName(showActive = formStruct.showActive, dsn = c, cusNum = res.c);

如果这个功能正常,请确保var numRes以保持线程安全