2015-04-22 69 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