2013-02-02 36 views
0

我創建了一個簡單的GUI,帶有2個文本框和1個按鈕。按鈕處理程序如下谷歌腳本獲取UI文本框的值

function handleButton1(e) 
{ 
    var app = UiApp.getActiveApplication(); 
    var v1 = e.parameter.TextBox1; 
    var v2 = e.parameter.TextBox2; 
    Logger.log(v1); 
    app.getElementById("TextBox1").setText(v2); 
    app.getElementById("TextBox2").setText(v1); 
    return app; 
} 

當我運行應用程序的文本框值是TextBox1和TextBox2。 當按下按鈕,那麼顯示的文本框的值都是未定義的。 我哪裏錯了。

回答

1

對於服務器端的點擊處理程序,您需要使用.addCallbackElement()明確地在處理程序事件中包含值。如果這樣做,則添加的已命名元素的當前值將包含在傳遞給處理程序的事件中。

由於您看到undefined,因此很可能您沒有添加回調。你應該有這樣的事情在你的UI定義:

var handler = app.createServerHandler('handleButton1') 
       .addCallbackElement(textBox1) 
       .addCallbackElement(textBox2); 
button.addClickHandler(handler); 

元素的名稱將被用於標記回調值(.setName()),而ID將被用於訪問該元素在你的處理器(.setId() )。

這是你的腳本的工作版本:

function doGet() { 
    var app = UiApp.createApplication(); 

    var textBox1 = app.createTextBox().setName("TextBox1").setId("TextBox1"); 
    var textBox2 = app.createTextBox().setName("TextBox2").setId("TextBox2"); 
    var button = app.createButton('Swap Contents'); 
    app.add(textBox1).add(textBox2).add(button); 

    var handler = app.createServerHandler('handleButton1') 
        .addCallbackElement(textBox1) 
        .addCallbackElement(textBox2); 
    button.addClickHandler(handler); 

    return app; 
} 

function handleButton1(e) 
{ 
    //Logger.log(JSON.stringify(e)); 
    var app = UiApp.getActiveApplication(); 
    var v1 = e.parameter.TextBox1; 
    var v2 = e.parameter.TextBox2; 
    app.getElementById("TextBox1").setText(v2); 
    app.getElementById("TextBox2").setText(v1); 
    return app; 
}