2014-09-22 75 views
0

对于下面的示例代码,希望能够每分钟将标签“statMsg”设置为不同的值(时间或计数器或状态)。但没有“应用”从testTrigger()访问:想要通过定时触发功能访问应用程序

//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

了UiApp部件不能什么比事件在了UiApp情况下发生的,而不是由触发器或其他外部应用其他更新。

有一种方法可以在UiApp中实现自动更新,但它使用了不同的方法。

这个想法是更改将触发事件处理程序的小部件的状态。时间将在睡眠呼叫中定义。

下面是一个使用复选框发起调用服务器处理事件的例子(已经发布here,在OP解释更好,我用这个的原因):

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 
} 

demo online here

+0

感谢塞尔,欣赏答案:这是有效的,是一个很好的选择! – user1387318 2014-09-23 22:29:51

+0

谢谢,请考虑接受答案。 – 2014-09-23 22:51:50

+0

我刚刚想到的最后一个后续问题:你知道检查触发器持续多久吗?我注意到它在几个小时后停止。你知道任何配额达成了吗? – user1387318 2014-09-23 23:35:12

相关问题