对于下面的示例代码,我们希望能够每分钟将标签'statMsg'设置为不同的值(时间或计数器或状态)。但是没有来自testTrigger()的'app'访问权限:
//Trigger every minute
function createTriggerInvite() {
ScriptApp.newTrigger('testTrigger')
.timeBased()
.everyMinutes(1)
.create();
}
function testTrigger(){
//NOT WORKING
var app=UiApp.getActiveApplication();
app.getElementById('statMsg').setText('Time');
return app;
}
function doGet(e) {
var dbgtime=true;
dbgtime=false;
//var dbg=true;
createTriggerInvite();
if (dbg==true)log('doget','Starting');
var app = UiApp.createApplication();
var stat=app.createLabel('Status...').setWidth(50)
.setStyleAttribute('color', 'white')
.setHorizontalAlignment(UiApp.HorizontalAlignment.LEFT)
.setId('statMsg'));
app.add(stat);
return app;
}
答案 0 :(得分:0)
有一种方法可以在UiApp中实现自动更新,但它采用了不同的方法。
我们的想法是更改将触发事件处理程序的窗口小部件的状态。时间将在睡眠呼叫中定义。
这是一个示例(已发布here,OP更好地解释了我使用它的原因),它使用 checkBox 来启动调用服务器处理程序的事件:
function doGet() {
var app = UiApp.createApplication().setTitle('Counter/Timer');
var Panel = app.createAbsolutePanel().setStyleAttribute('padding','35');
var counter = app.createHTML().setId('counter').setHTML('<B>Timer = wait</B>').setStyleAttribute('fontSize','40px');// set start display
var clo = app.createTextBox().setName('clo').setId('clo').setValue('0').setVisible(false);//set start value in seconds
var handler1 = app.createServerHandler('doSomething').addCallbackElement(Panel);
var chk1 = app.createCheckBox('test1').addValueChangeHandler(handler1).setVisible(true).setId('chk1').setVisible(false);
app.add(Panel.add(chk1).add(counter).add(clo));
chk1.setValue(true,true);// start the process
return app}
function doSomething(e) {
var app = UiApp.getActiveApplication();
var xx = Number(e.parameter.clo);
var disp = app.getElementById('counter')
xx++ ;// replace by xx-- to count downwards
if(xx>600){ // 10 minutes timeout for example
disp.setHTML('<B> GAME OVER ;-)</B>').setStyleAttribute('fontSize','80px').setStyleAttribute('color','RED')
return app
}
var cnt = app.getElementById('clo').setValue(xx)
disp.setHTML('<B>'+T(xx)+'</B>')
Utilities.sleep(1000); // instead of sleeping do something !
// below comes the "active" part
var chk1 = app.getElementById('chk1').setValue(false,false)
var chk1 = app.getElementById('chk1').setValue(true,true)
return app;
}
function T(val){
var min = parseInt(val/60);
var sec = val-(60*min);
if(sec<10){sec='0'+sec}
if(min<10){min='0'+min}
var st = '> '+min+':'+sec
return st
}