2014-09-22 76 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

相關問題