链接功能如何访问Google Apps脚本中的表单数据?

时间:2013-02-03 18:19:19

标签: javascript google-apps-script

此问题是“Is 'chaining' functions available in GAS?。”

的扩展

我需要做类似的事情......复制/粘贴回答上一个问题的代码示例:

var app = null;
function firstHandler(e) {
  if( app == null )
    app = UiApp.getActiveApplication();
  //do your thing
  //now, instead "return app;" you return the second handler
  return secondHandler(e);
}

function secondHandler(e) {
  if( app == null )
    app = UiApp.getActiveApplication();
  //do your job
  return app;
}

其中firstHandler()是按钮的单击处理程序。这个例子与我需要做的事情之间的区别在于,在我的例子中,secondHandler()需要从表单中提取一条信息。具体来说,我需要从列表框中获取所选值。

通常情况下,我将secondHandler()拉入该信息的方式是将包含列表框的父对象传递给函数,然后有一行如下:

var value = eventInfo.parameter.listBoxName;

但是,我无法将列表框所在的网格传递给secondHandler()。这是我尝试过的:

var app = null;
function firstHandler(e) {
  if( app == null )
    app = UiApp.getActiveApplication();
  //do your thing
  //get the object now, pass it into the chained function
  var myGrid = app.getElementById("gridId");
  return secondHandler(myGrid);
}

function secondHandler(e) {
  if( app == null )
    app = UiApp.getActiveApplication();
  var value = e.parameter.listBoxName.toString();
  //do your job
  return app;
}

但这没有奏效。我也尝试将secondHandler()修改为完全无参数,这样我就可以绕过必须将网格传递给firstHandler()中的secondHandler():

var app = null;
function firstHandler(e) {
  if( app == null )
    app = UiApp.getActiveApplication();
  //do your thing
  return secondHandler(e);
}

function secondHandler(e) {
  if( app == null )
    app = UiApp.getActiveApplication();
  var value = app.getElementById('listBoxId').value;
  //do your job
  return app;
}

这不起作用......“app.getElementById('listBoxId')。value”似乎没有返回任何内容。我不明白为什么不:(

有关我如何做到这一点的任何想法?任何人都知道为什么我的app.getElementById变通方法没有按预期运行?任何和所有帮助赞赏!!!

1 个答案:

答案 0 :(得分:0)

试试这个。

function firstHandler(e) {
  var app = UiApp.getActiveApplication();
  //do your thing
  return secondHandler(e);
}

function secondHandler(e) {
  var app = UiApp.getActiveApplication();
  var value = e.parameter.listBoxName;
  //do your job
  return app;
}

确保在创建处理程序时使用此功能。

app.createServerHandler("firstHandler").addCallbackElement(gridContainingListBox);

如果您要从页面中检索值,则 可以使用e.parameter,这是在添加正确的回调元素时正确设置的。如果您要在UI中修改元素,那么您当然可以使用app.getElementById(...).whateverFunction(),但请注意,您无法调用getValue()等。