我第一次尝试使用Google App脚本,并希望通过单击按钮从文本框中获取数据(在第二个函数中输入变量TC)。我试图从谷歌和网上跟踪,但似乎所有使用的功能已经退役。任何人都可以给我一些指导,我没有任何UI经验,并且已经在这个项目工作了几个小时。
请参阅下面的简化代码。
谢谢,
约翰
function doGet() {
var app = UiApp.createApplication().setTitle('Richardson-Dushmann Calculator');
var Temperature = app.createTextBox().setName("Temperature");
var button = app.createButton('Calculate').setId('Calculate');
var handler = button.addClickHandler(app.createServerHandler("handlerFunction"));
var inputGrid = app.createGrid(1, 3);
var mypanel = app.createVerticalPanel();
inputGrid.setWidget(0, 0, app.createLabel('T = '));
inputGrid.setWidget(0, 1, Temperature);
inputGrid.setWidget(0, 2, app.createLabel(' \xB0C'));
mypanel.add(inputGrid);
mypanel.add(button);
app.add(mypanel);
return app;
}
function handlerFunction(e) {
var app = UiApp.getActiveApplication();
var TC = e.parameter.Temperature;
return app;
}
答案 0 :(得分:1)
您必须告诉处理程序应将哪个窗口小部件值传输到函数。
您可以添加textBox,但最好添加最高级别的父窗口小部件,以备日后需要其他值时使用。
使用handler.addCallBackElement(widget)
来实现这一目标,documented here。
编辑以下评论:
完整代码
function doGet() {
var app = UiApp.createApplication().setTitle('Richardson-Dushmann Calculator');
var Temperature = app.createTextBox().setName("Temperature");
var inputGrid = app.createGrid(1, 3);
var mypanel = app.createVerticalPanel();
var button = app.createButton('Calculate').setId('Calculate');
var handler = button.addClickHandler(app.createServerHandler("handlerFunction").addCallbackElement(mypanel))
inputGrid.setWidget(0, 0, app.createLabel('T = '));
inputGrid.setWidget(0, 1, Temperature);
inputGrid.setWidget(0, 2, app.createLabel(' \xB0C'));
mypanel.add(inputGrid);
mypanel.add(button);
app.add(mypanel);
return app;
}
function handlerFunction(e) {
var app = UiApp.getActiveApplication();
var TC = e.parameter.Temperature;
return app.add(app.createLabel(e.parameter.Temperature));// add the returned value in the app to check it comes back in the handler
}