0

Google Apps Script で次のようなアプリを作成しようとしています: 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
}

そして、テーブルにいくつかのウィジェットを追加するテーブルのボタンにリンクされたハンドラーを書きたいと思います。

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問題は、テーブルの作成後に << die >> という関数でコールバック要素を定義し、このコールバック要素がハンドラーで失われることにあると思います。任意の提案をいただければ幸いです。ありがとう。

4

1 に答える 1

1

あなたのコードは問題ないようです。エラーメッセージは(一度だけ)非常に明確で、最初の引数は文字列であり、数値でなければなりません。x(どこから来たのかはわかりませんが、どこかで文字列になっています...おそらくe.parameter.something常に文字列である a です)

ハンドラーで次のコードを試してください。

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