2013-05-14 30 views
0

我試圖讓一個按鈕不止一次觸發(即多次點擊),但它似乎不工作。任何幫助將不勝感激。理論上它應該觸發多次,但只觸發一次,當我在日誌中按鈕只觸發一次Google Apps腳本

function a 
{ 
... 
var addcolumnspanel = app.createHorizontalPanel().setId("addcolumnspanel"); 
    var addbuttonhandler = app.createServerHandler("addcolumn"); 
    var addbutton = app.createButton().setId("btnaddcolumn").setText("Add another column").addClickHandler(addbuttonhandler); 

... 
return app; 
} 

function addcolumn() 
{ 
...//Do some stuff 
return app; 
} 

檢查它這裏是一個更精確的代碼示例

//set global var 
var counter = 1; 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
//Set up the Menu bar 
function onOpen() { 
// Logger.clear(); 
    var menuEntries = [ {name: "demo", functionName: "myFunction"}]; 
    ss.addMenu("Demo", menuEntries); 

} 

function myFunction() { 

    var myapp = UiApp.createApplication().setHeight(430).setWidth(800);; 
    var button = myapp.createButton("Clicky"); 
    var myhandler = myapp.createServerHandler("secondfunction"); 
    var myhandler = button.addClickHandler(myhandler) 
    myapp.add(button); 
    ss.show(myapp); 
} 

function secondfunction() 
{ 
    counter++; 
    Logger.log(counter); 

} 
+1

你是什麼意思'不止一次火'?只有當用戶手動點擊按鈕 – Srik 2013-05-14 10:21:20

+0

時,addcolumn()函數纔會被調用是的,它只在我第一次單擊時觸發。我每次點擊它的含義都不會觸發。 – Kevrone 2013-05-14 23:17:45

+0

請更多代碼!問題可能在於「做一些事情」行... – Mogsdad 2013-05-15 02:40:21

回答

0

確定。問題在於計數器變量。您不能在Apps Script中使用全局變量。有關更多信息,請參閱this answer。您可以使用ScriptProperties或CacheService作爲替代方案。

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
//Set up the Menu bar 
function onOpen() { 
// Logger.clear(); 
    var menuEntries = [ {name: "demo", functionName: "myFunction"}]; 
    ss.addMenu("Demo", menuEntries); 
    // Store your counter in CacheService as a string. 
    CacheService.getPrivateCache().put('counter','1',3600); 
} 

function myFunction() { 

    var myapp = UiApp.createApplication().setHeight(430).setWidth(800);; 
    var button = myapp.createButton("Clicky"); 
    var myhandler = myapp.createServerHandler("secondfunction"); 
    var myhandler = button.addClickHandler(myhandler) 
    myapp.add(button); 
    ss.show(myapp); 
} 

function secondfunction() 
{ 
    var cache = CacheService.getPrivateCache(); 
    var counter = parseInt(cache.get('counter')); 
    counter ++; 
    cache.put('counter', counter.toString()); 
    Logger.log(counter); 

} 
+0

是的,這是正確的。它在緩存服務中效果不好,在ScriptProperties中工作正常,但是來自SQL世界,我仍然在努力使用ScriptDB語法:例如存儲一個值ob = {counter:1},然後試圖恢復並更新該值沒有拉動整個分貝.query({})指針會有幫助,但謝謝澄清。傳統編程中我們通常會想到的奇怪的全局變量並不是真正的全局變量。 – Kevrone 2013-05-15 06:27:00