GAS - 在运行时发现信息

时间:2012-12-28 08:49:32

标签: google-apps-script

由于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,它现在只是一个玩具,我没时间玩,我实际上有工作要做。

4 个答案:

答案 0 :(得分:1)

我记得有一个库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 :(得分:1)

UiApp的客户端是GWT小部件。我们没有任何地方声明服务器端是由GWT Java对象组成的(它不是),甚至根据它们如何记录工作也没有意义。服务器对象只不过是对客户端对象的引用 - 可用于将命令与之关联的引用,然后将其传送到客户端。没有调试信息,因为服务器“小部件”除了存储命令的客户端小部件的id之外没有其他信息。

答案 2 :(得分:0)

您是否在GUI Builder中为按钮添加了回调元素?如果您将按钮放在FormPanel中,FormPanel的所有字段都作为参数提交,如果它是一个简单的按钮,您必须添加回调元素以获取GUI Builder中的事件参数,即触发事件下的小白框在活动上。

答案 3 :(得分:0)

您可以使用标准的Javascript toSource方法来调试某些对象。如果你调试在创建新的web-app脚本时给出的默认示例代码,这就是toSource给你的:

({parameter:{clientY:“22”,clientX:“17”,eventType:“click”,ctrl:“false”,meta:“false”,source:“u29169455861”,button:“1”, alt:“false”,screenY:“148”,screenX:“381”,y:“18”,shift:“false”,x:“13”}})