ГАЗ - обнаружение информации во время выполнения

Поскольку документация GAS действительно отстойная, я подумал, что могу попытаться хотя бы найти информацию о параметрах, которые передаются даже обработчикам. Этот тривиальный пример показывает, что я пытаюсь сделать.

MyGui построен с использованием Gui-builder.
Он содержит кнопку - btn, которая имеет обратный вызов щелчка - btn_click Он также содержит TextArea - txtArea1

Simples

function doGet() {
  var app = UiApp.createApplication();
  app.add(app.loadComponent("MyGui"));
  return app;
}

function btn_click(e) {

  var app = UiApp.getActiveApplication();
  var ta = app.getElementById('txtArea1');

  if(!e)
  {
    ta.setText('null object');
  }
  else
  {
    ta.setText(e.toDebugString());
  }

  return app;
}

Дурак я ! Я предположил, что, поскольку в повторной документации указано, что компоненты GAS построены на GWT, а GWT - на основе Java, EVERYTHING - это java.lang.Object, который я должен был бы вызвать toDebugString (), чтобы найти хотя бы некоторую информацию о объект, переданный в функцию обработчика.

Извините, я очень близок к тому, чтобы отказаться от использования GAS, сейчас это просто игрушка, и у меня нет времени играть, у меня действительно есть работа.

1
добавлено
Просмотры: 1
de

4 ответы

Клиентская сторона UiApp является виджетами GWT. Нигде мы не заявили, что серверная сторона состоит из объектов GWT Java (это не так), и это даже не имеет смысла в зависимости от того, как они документированы для работы. Объекты сервера - это не более чем ссылки на объекты-клиенты - ссылки, которые вы можете использовать для объединения команд, которые затем отправляются клиенту. Информация об отладке отсутствует, поскольку у «виджета» сервера нет информации, отличной от идентификатора виджета клиента, для которого они сохраняют команды.

1
добавлено
UiApp определенно является быстрым инструментом для разработчиков, а не полнофункциональным инструментарием на 100%. Если вы хотите гораздо более тонкое управление кодом UI, используйте jQuery внутри HtmlService.
добавлено автор Corey G, источник
Ах. Хорошо, фундаментальное недоразумение с моей стороны, я думаю. благодаря
добавлено автор SmittyBoy, источник

Я помню библиотеку SmartDebug , которая позволяет регистрировать объекты в ui , Добавьте библиотеку и попробуйте следующее:

function doGet() {
var app = UiApp.createApplication();
  SmartDebug.enable(true);
  SmartDebug.addLogWidgetToApplication();
  app.add(app.loadComponent("MyGui"));
  return app;
}

function btn_click(e) {
   var app = UiApp.getActiveApplication();
  if(!e) {
    SmartDebug.logMessage('null');
  } else {
    SmartDebug.logObject(e,'event');
  }
  return app;
}

вот что я получил:

11:19:55: event.parameter.clientY: 161
11:19:55: event.parameter.clientX: 143
11:19:55: event.parameter.eventType: click
11:19:55: event.parameter.ctrl: false
11:19:55: event.parameter.meta: false
11:19:56: event.parameter.source: Button1
11:19:56: event.parameter.button: 1
11:19:56: event.parameter.alt: false
11:19:56: event.parameter.screenY: 270
11:19:57: event.parameter.screenX: 143
11:19:57: event.parameter.y: 18
11:19:57: event.parameter.shift: false
11:19:57: event.parameter.x: 92
1
добавлено
Интересно. Похоже, что e переходит в SmartLogger как «событие». Где этот тип документирован? Что произойдет, если вы передадите его как тип «объект»?
добавлено автор SmittyBoy, источник

Вы можете использовать стандартный метод Javascript toSource для отладки некоторых объектов. Если вы отлаживаете код примера по умолчанию, который вы получите при создании нового скрипта веб-приложения, это то, что дает toSource:

({параметр: {clientY: "22", clientX: "17", eventType: "click", ctrl: "false", meta: "false", источник: "u29169455861", кнопка: "1", alt: " false ", screenY:" 148 ", screenX:" 381 ", y:" 18 ", shift:" false ", x:" 13 "}})

0
добавлено
Спасибо, очень полезно.
добавлено автор SmittyBoy, источник

Вы связали в GUI Builder элемент обратного вызова с кнопкой? Если вы поместите кнопку в FormPanel, все поля FormPanel будут представлены в качестве параметров, если это простая кнопка, вы должны добавить элементы обратного вызова, чтобы получить в качестве параметров события, которые есть в GUI Builder, маленькое белое поле под событием для запуска на мероприятии.

0
добавлено
Да, я понимаю, как генерировать обратный вызов, и вызываемый вызов называется, однако, это не мой вопрос. Вопрос в том, как узнать, что доступно в параметре - это нигде не документировано (что я могу найти, во всяком случае). Кроме того, почему приведенный выше код не работает. e.toDebugString не работает.
добавлено автор SmittyBoy, источник