-1

由于 GAS 文档实际上很糟糕,我想我可能会尝试至少发现有关传递给处理程序的参数的信息。这个简单的例子显示了我想要做什么。

MyGui 是使用 Gui-builder 构建的。
它包含一个按钮 - btn,它有一个点击回调 - btn_click 它还包含一个 TextArea - txtArea1

简单的

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 的,所以一切都是 java.lang.Object,我应该能够调用 toDebugString() 来找到至少一些关于对象传递给处理函数。

抱歉,我已经快要放弃使用 GAS 了,它现在只是个玩具,我没时间玩,其实我还有工作要做。

4

4 回答 4

1

UiApp 的客户端是 GWT 小部件。我们没有在任何地方说过服务器端是由 GWT Java 对象组成的(它不是),即使根据文档记录它们的工作方式,这也没有任何意义。服务器对象只不过是对客户端对象的引用——您可以使用这些引用来关联命令,然后将其传送到客户端。没有调试信息,因为服务器“小部件”除了存储命令的客户端小部件的 id 之外没有其他信息。

于 2012-12-28T14:49:13.457 回答
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
于 2012-12-28T11:25:11.473 回答
0

您可以使用标准的 Javascript toSource方法来调试一些对象。如果您调试在创建新的 Web 应用程序脚本时获得的默认示例代码,这就是 toSource 为您提供的:

({parameter:{clientY:"22", clientX:"17", eventType:"click", ctrl:"false", meta:"false", source:"u29169455861", button:"1", alt:"假”,屏幕Y:“148”,屏幕X:“381”,y:“18”,移位:“假”,x:“13”}})

于 2012-12-28T14:53:00.160 回答
0

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

于 2012-12-28T09:04:14.293 回答