0

在 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在创建表后 << dies >> 的函数中定义了回调元素,并且该回调元素在处理程序中丢失了。任何建议将不胜感激。谢谢。

4

1 回答 1

1

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

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

table.setWidget(Number(x),y,app.createTextBox());
于 2013-11-10T23:54:35.560 回答