在处理函数中使用和修改全局变量

Fau*_* R. 3 google-apps-script

大家都好,

我可以在处理函数中使用全局变量,但是我不能在函数内"全局"修改它们.

在下面的代码中,在第一次单击后,它将显示数字1001(处理程序读取,递增并显示正确的结果).但是,任何进一步的点击总是会显示1001,因此处理程序会继续读取原始的globalVar值:它不会像我期望的那样被修改.

我能做些什么来解决这个问题?

var globalVar = 1000;

function testingGlobals() {
  var app = UiApp.createApplication();
  var doc = SpreadsheetApp.getActiveSpreadsheet();
  var panel = app.createVerticalPanel().setId('panel');
  app.add(panel);
  panel.add(app.createButton(globalVar).setId("globalVar").addClickHandler(app.createServerHandler("chgGlobal").addCallbackElement(panel)));
  doc.show(app)
}

function chgGlobal(e) {
  var app = UiApp.createApplication();
  globalVar++;
  app.getElementById("globalVar").setText(globalVar);
  return app;
}
Run Code Online (Sandbox Code Playgroud)

Waq*_*mad 6

您不能以这种方式递增全局变量,因为每次处理程序执行时,都会初始化全局变量然后进行操作.您可以使用隐藏的表单字段来保存您可以在处理程序中更改的变量,只要应用程序处于打开状态,它就会保持不变.

例如

function testingGlobals() {
  var app = UiApp.createApplication();
  var doc = SpreadsheetApp.getActiveSpreadsheet();
  var panel = app.createVerticalPanel().setId('panel');
  var myVar = app.createHidden().setValue('0').setName('myVar').setId('myVar');
  panel.add(myVar);
  app.add(panel);
  panel.add(app.createButton('0').setId("globalVar").addClickHandler(app.createServerHandler("chgGlobal").addCallbackElement(panel)));
  doc.show(app)
}

function chgGlobal(e) {
  var app = UiApp.createApplication();
  gloabalVar = parseInt(e.parameter.myVar);
  gloabalVar ++;
  app.getElementById('myVar').setValue(gloabalVar.toString());
  app.getElementById("globalVar").setText(gloabalVar);
  return app;
}
Run Code Online (Sandbox Code Playgroud)