對於服務器端的點擊處理程序,您需要使用.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;
}