Google Script Получить значение текстового поля пользовательского интерфейса

Я создал простой графический интерфейс с 2 текстовыми полями и 1 кнопкой. Обработчик кнопки выглядит следующим образом:

function handleButton1(e) 
{
    var app = UiApp.getActiveApplication();
    var v1 = e.parameter.TextBox1;
    var v2 = e.parameter.TextBox2;
    Logger.log(v1);
    app.getElementById("TextBox1").setText(v2);
    app.getElementById("TextBox2").setText(v1);
    return app;
}

Когда я запускаю приложение, значениями текстового поля являются TextBox1 и TextBox2. При нажатии кнопки оба отображаемых значения текстового поля не определены. Где я ошибаюсь.


person user2035041    schedule 02.02.2013    source источник


Ответы (1)


При использовании обработчика кликов на стороне сервера вам необходимо явно включить значения в событие обработчика, используя .addCallbackElement(). Если вы это сделаете, текущее значение именованных элементов, которые вы добавляете, будет включено в событие, доставленное вашему обработчику.

Поскольку вы видите undefined, скорее всего, вы не добавили обратные вызовы. У вас должно быть что-то вроде этого в вашем определении пользовательского интерфейса:

var handler = app.createServerHandler('handleButton1')
                 .addCallbackElement(textBox1)
                 .addCallbackElement(textBox2);
button.addClickHandler(handler);

Имя элемента будет использоваться для маркировки значения обратного вызова (.setName()), а идентификатор будет использоваться для доступа к элементу в вашем обработчике (.setId()).

Вот рабочая версия вашего скрипта:

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

  var textBox1 = app.createTextBox().setName("TextBox1").setId("TextBox1");
  var textBox2 = app.createTextBox().setName("TextBox2").setId("TextBox2");
  var button = app.createButton('Swap Contents');
  app.add(textBox1).add(textBox2).add(button);

  var handler = app.createServerHandler('handleButton1')
                   .addCallbackElement(textBox1)
                   .addCallbackElement(textBox2);
  button.addClickHandler(handler);

  return app;
}

function handleButton1(e) 
{
  //Logger.log(JSON.stringify(e));
  var app = UiApp.getActiveApplication();
  var v1 = e.parameter.TextBox1;
  var v2 = e.parameter.TextBox2;
  app.getElementById("TextBox1").setText(v2);
  app.getElementById("TextBox2").setText(v1);
  return app;
}
person Mogsdad    schedule 17.07.2013