我读到了(未记录的)addTmer,并希望用它来更新UI。
Auto refresh Google Apps Scripts webapp UI?的示例效果很好
// This code works
function doGet(e)
{
var app = UiApp.createApplication().setTitle('Test addTimer - createApplication in doget');
var appLocal = app;
var handler = appLocal.createServerHandler("update");
appLocal.addTimer(handler , 4000);
var label = appLocal.createLabel(new Date()).setId("label");
appLocal.add(label);
return appLocal;
}
function update(e)
{
var appLocal = UiApp.getActiveApplication();
// var appLocal = app;
appLocal.getElementById("label").setText(new Date());
var handler = appLocal.createServerHandler("update");
appLocal.addTimer(handler , 1000);
return appLocal;
}
但是如果我将createApplication从doGet()移到全局变量中,则会在运行时发生“意外错误”。 如果没有addTimer,可以将createApplication从doget()移到全局范围。
// This code will crash at runtime
var app = UiApp.createApplication().setTitle('Test addTimer , createApplication outside doGet');
function doGet(e)
{
var appLocal = app;
var handler = appLocal.createServerHandler("update");
appLocal.addTimer(handler , 4000);
var label = appLocal.createLabel(new Date()).setId("label");
appLocal.add(label);
return appLocal;
}
function update(e)
{
var appLocal = UiApp.getActiveApplication();
// var appLocal = app;
appLocal.getElementById("label").setText(new Date());
var handler = appLocal.createServerHandler("update");
appLocal.addTimer(handler , 1000);
return appLocal;
}
正如我所见,全球使用
var app = createApplication();
我想更多的人也想使用addTimer,我在这里发布我的经验。
也许有人可以解释为什么这是一个问题。
答案 0 :(得分:1)
当您在任何函数之外调用服务时,每次调用任何函数时都会执行此调用,也就是说调用doGet
时以及调用处理函数时以及计时器触发时脚本执行。
这意味着您正在调用UiApp.createApplication()
2次(以及更多次)......这不是一个好主意并且会产生“意外错误”。
Uiapp旨在使用主服务调用和处理程序,每个处理程序使用getActiveApplication()
获取活动实例为什么要尝试以不同方式使用它?