2015-04-22 67 views
1

我有一个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。)

回答

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