无法在google应用程序脚本的服务器处理程序中访问调用窗口小部件的标记

时间:2014-02-27 06:25:19

标签: google-apps-script

我希望能够从服务器处理函数访问动态创建的小部件的标记。

这是一个在运行时创建5个checkBox的简单示例。我想在服务器处理程序中访问它们的标签。

function doGet() {
  var app = UiApp.createApplication();
  var mainPanel = app.createVerticalPanel();

  var handler = app.createServerHandler('myClickHandler');

  for(var i=0; i<6; ++i) {
    var newCheckBox = app.createCheckBox()
                         .setId('cBox' +i)
                         .setName('cBox' +i)
                         .setText('checkBox ' +i)
                         .setTag('cBox' +i +' was clicked');

    newCheckBox.addValueChangeHandler(handler);

    mainPanel.add(newCheckBox);
  }

  var label = app.createLabel()
                 .setId('statusLabel')
                 .setVisible(false);

  mainPanel.add(label);

  handler.addCallbackElement(mainPanel);
  app.add(mainPanel);
  return app;
}

在这个例子中,我喜欢名为&#39; statusLabel&#39;的标签文本。设置为单击的复选框的标记。

我知道如果我直接使用小部件的名称,我可以在服务器处理程序中读取标签,如下例所示:

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

  label.setText(e.parameter.cBox1_tag)
  label.setVisible(true);

  app.close();
  return app;
}

但我想做的是能够用这样的东西拉出源代码的标签

statusLabel.setText(e.parameter.source_tag);

但是失败了。我也试过了

var cBoxNum = e.parameter.source(e.parameter.source.length -1);
var cBoxName = 'cBox' +xBoxNum;
statusLabel.setText(e.parameter.cBoxName_tag)

var cBoxNum = e.parameter.source(e.parameter.source.length -1);
var cBoxName = 'cBox' +xBoxNum +'_tag';
statusLabel.setText(e.parameter.cBoxName)

所有这些方法都返回&#39; undefined&#39;。任何帮助,将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

在这种情况下,您应该使用不同的语法。

使用括号来获取带有“重建”字符串的参数值。

像这样:var tagValue = e.parameter[e.parameter.source+'_tag'];

您的功能为online test here

完整代码

function doGet() {
  var app = UiApp.createApplication();
  var mainPanel = app.createVerticalPanel();
  var handler = app.createServerHandler('myClickHandler');
  for(var i=0; i<6; ++i) {
    var newCheckBox = app.createCheckBox()
            .setId('cBox' +i)
            .setName('cBox' +i)
            .setText('checkBox ' +i)
            .setTag('cBox' +i +' was clicked');
    newCheckBox.addValueChangeHandler(handler);
    mainPanel.add(newCheckBox);
  }
  var label = app.createLabel()
            .setId('statusLabel')
            .setVisible(false);
  mainPanel.add(label);
  handler.addCallbackElement(mainPanel);
  app.add(mainPanel);
  return app;
}

function myClickHandler(e) {
  var app = UiApp.getActiveApplication();
  var label = app.getElementById('statusLabel');
  label.setText(e.parameter[e.parameter.source+'_tag'])
  label.setVisible(true);
  return app;
}