如何在服务器处理程序中使用在另一个函数中创建的对象(flextable)

时间:2013-11-10 23:45:07

标签: google-apps-script

在Google Apps脚本中,我正在尝试构建如下应用: 在doGet函数中我构建应用程序

function doGet() {

  var app = UiApp.createApplication();
  var panel = app.createVerticalPanel().setId('panel');
  var Table = _table_create(some arguments);
  ...
  panel.add(Table);
  app.add(panel);
  return app;
}

该表是由函数创建的,因为我需要在运行时创建几个带有一些变量参数的类似表,而我无法预测何时和多少。因此,我有一个函数_table_create,用于创建包含按钮的表

function _table_create(arguments) {
  var app = UiApp.getActiveApplication();
  var Table = app.createFlexTable();
  ...
  var handler1 = app.createServerHandler("handler");
  handler1.addCallbackElement(Table);
  Table.setWidget(x,y,app.createButton("button", handler1).setId("button_"+Table.getId()));
  ...
  return Table
}

我希望编写一个Handler链接到表格中的按钮,该按钮会在表格中添加一些小部件。

function handler(e){
  var app = UiApp.getActiveApplication();
  var table_id = (e.parameter.source).split('_');
  table_id = table_id[0];
  var table = app.getElementById(table_id);
  Logger.log(table.getType()); //// prints GENERIC
  ...
  table.setWidget(x,y,app.createTextBox());
  return app;
}

但是当我点击按钮时,我收到一条错误消息,指出它没有为表找到方法setWidget(string,number,TextBox)。 我认为问题在于我在函数中定义了回调元素Table<<模具>>在创建表之后,这个回调元素会丢失给处理程序。任何建议将不胜感激。感谢。

1 个答案:

答案 0 :(得分:1)

您的代码似乎没问题,错误消息(一次)非常明确,第一个参数是一个字符串,它应该是一个数字。 (我不知道x来自哪里,但它已成为一个字符串...也许它是一个e.parameter.something,它总是字符串)

只需在处理程序中尝试此代码:

table.setWidget(Number(x),y,app.createTextBox());