2013-02-02 41 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; 
}