2013-02-03 50 views
0

此問題是「Is 'chaining' functions available in GAS?」的擴展。鏈式功能如何在Google Apps腳本中訪問表單數據?

我需要做類似的東西...複製/粘貼它回答了前一個問題的代碼示例:

var app = null; 
function firstHandler(e) { 
    if(app == null) 
    app = UiApp.getActiveApplication(); 
    //do your thing 
    //now, instead "return app;" you return the second handler 
    return secondHandler(e); 
} 

function secondHandler(e) { 
    if(app == null) 
    app = UiApp.getActiveApplication(); 
    //do your job 
    return app; 
} 

凡firstHandler()是一個按鈕的點擊處理程序。這個例子和我需要做的區別在於,在我的例子中,secondHandler()需要從表單中提取一條信息。具體來說,我需要從列表框中獲取選定的值。

通常情況下,我會secondHandler()拉這些信息在將傳遞包含列表框到函數的父對象的方式,那麼有這樣一行:

var value = eventInfo.parameter.listBoxName; 

然而,我在將列表框放入第二個處理程序()中時遇到問題。以下是我試過的:

var app = null; 
function firstHandler(e) { 
    if(app == null) 
    app = UiApp.getActiveApplication(); 
    //do your thing 
    //get the object now, pass it into the chained function 
    var myGrid = app.getElementById("gridId"); 
    return secondHandler(myGrid); 
} 

function secondHandler(e) { 
    if(app == null) 
    app = UiApp.getActiveApplication(); 
    var value = e.parameter.listBoxName.toString(); 
    //do your job 
    return app; 
} 

但是這一直沒有奏效。我也嘗試修改secondHandler()是完全免費的說法,這樣我可以繞過不必電網進入secondHandler()內firstHandler():

var app = null; 
function firstHandler(e) { 
    if(app == null) 
    app = UiApp.getActiveApplication(); 
    //do your thing 
    return secondHandler(e); 
} 

function secondHandler(e) { 
    if(app == null) 
    app = UiApp.getActiveApplication(); 
    var value = app.getElementById('listBoxId').value; 
    //do your job 
    return app; 
} 

這也不管用... 「app.getElementById('listBoxId')。value」似乎沒有返回任何東西。我不知道爲什麼不:(

,我怎麼能做到這一點有什麼想法?任何人都知道爲什麼預期我app.getElementById解決方法是不是正常?任何及所有的幫助感激!

+0

嘗試用'var app替換'var app = null;'' ;'。我相信在這樣的功能之外設置一個變量會使其保持不變。 – Fred

回答

0

試試這個。

function firstHandler(e) { 
    var app = UiApp.getActiveApplication(); 
    //do your thing 
    return secondHandler(e); 
} 

function secondHandler(e) { 
    var app = UiApp.getActiveApplication(); 
    var value = e.parameter.listBoxName; 
    //do your job 
    return app; 
} 

確保您在創建處理程序時使用。

app.createServerHandler("firstHandler").addCallbackElement(gridContainingListBox); 

如果你從頁面檢索值,你使用e.parameter,當您添加適當的回調元素時,它會正確設置。如果您要修改UI中的元素,那麼您當然可以使用app.getElementById(...).whateverFunction(),但請注意,您不能撥打getValue()等。

+0

你當然可以使用'if(app == null)'行,但是我從來沒有遇到過兩次調用getActiveApplication()的問題。 –

相關問題