google-apps-script - 处理程序中是否可以有静态变量?

标签 google-apps-script

我想制作一个脚本来跟踪按下按钮的次数。众所周知,javascript 缺乏对静态变量的支持,但这通常可以作为在目标函数外部定义变量的解决方法。

尽管如此,这对我来说在简单的谷歌脚本网络应用程序上不起作用。代码如下,它是模板 Web 应用程序的简单扩展。

谁知道如何实现这一点?

这是谷歌应用程序的代码:

// Script-as-app template.

function doGet() {
  var app = UiApp.createApplication();
  var button = app.createButton('Click Me');
  app.add(button);
  var label = app.createLabel('The button was clicked.')
                 .setId('statusLabel')
                 .setVisible(false);
  app.add(label);
  myClickHandler.counter = 0;

  var handler = app.createServerHandler('myClickHandler');
  handler.addCallbackElement(label);
  button.addClickHandler(handler);

  return app;
}

function myClickHandler(e) {
  var app = UiApp.getActiveApplication();

  var label = app.getElementById('statusLabel');
  label.setVisible(true);
  label.setText('Clicked ' + myClickHandler.counter + ' times.')
  myClickHandler.counter++;
  //app.close();
  return app;
}

最佳答案

有几种可能的方法可以实现这一点,其中之一是使用隐藏的小部件来保存值。

function doGet(){
  var app = UiApp.createApplication();
  var button = app.createButton('Click Me');
  app.add(button);
  var counterValue = 0;
  var label = app.createLabel('The button was clicked.')
                 .setId('statusLabel')
                 .setVisible(false);
  var counter = app.createHidden('counter').setId('counter').setValue(counterValue)               
  app.add(label).add(counter);

  var handler = app.createServerHandler('myClickHandler');
  handler.addCallbackElement(counter);
  button.addClickHandler(handler);

  return app;
}

function myClickHandler(e) {
  var app = UiApp.getActiveApplication();

  var label = app.getElementById('statusLabel');
  label.setVisible(true);
  var counterValue = Number(e.parameter.counter)
  var counter = app.getElementById('counter')
  counterValue++;
  counter.setValue(counterValue.toString())
  label.setText('Clicked ' + counterValue + ' times.')
  return app; 
}

关于google-apps-script - 处理程序中是否可以有静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12751224/

相关文章:

javascript - Gmail Apps 脚本函数显示来自 GMail Addon 的浏览器 MsgBox

javascript - 用脚本替换 Google 电子表格中的多个字符串

csv - Google Apps Script Utilities.parseCsv() 更改小数和千位分隔符

google-apps-script - 使用 Google 应用脚本更改小数位数?

google-apps-script - 如何以编程方式将 Google 表格脚本发布/部署为 API 可执行文件?

javascript - 在第一个分隔符上拆分列并在分隔符 gs 脚本之前和之后输出

google-apps-script - 使用 Google 电子表格访问 BigQuery

google-apps-script - 如何使用 Google 相册 API 方法 : mediaItems. 在 Google 应用脚本中搜索电子表格

javascript - 两列中的 Google Apps 脚本日期

javascript - 嵌套的 WHILE 循环未按预期运行 - Javascript/Google Apps 脚本