由于GAS文档实际上很糟糕,我想我至少可以尝试发现传递给even处理程序的参数的信息。这个简单的例子展示了我要做的事情。
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。对象,我应该能够调用toDebugString()来找到至少一些关于传递给处理函数的对象的信息。
对不起,我几乎要放弃使用GAS了,现在它只是一个玩具,我没有时间玩,我实际上有工作要做
我记得有一个库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
UiApp的客户端是GWT小部件。我们没有在任何地方声明服务器端是由GWT Java对象组成的(事实并非如此),基于它们的工作方式,这样说也没有意义。服务器对象只不过是对客户端对象的引用——您可以使用这些引用来关联命令,然后将这些引用发送给客户端。没有调试信息,因为服务器"小部件"除了为其存储命令的客户端小部件的id之外没有其他信息。
您是否在GUI Builder中为按钮关联了回调元素?如果你把按钮放在FormPanel中,FormPanel的所有字段都作为参数提交,如果它是一个简单的按钮,你必须添加回调元素来获取事件参数,这是在GUI Builder中,在事件下的小白框,以触发事件。
您可以使用标准的Javascript toSource方法来调试一些对象。如果你在创建一个新的web应用程序脚本时调试默认的示例代码,这就是toSource给你的:
({参数:{clientY:"22",clientX:"17",eventType:"点击",ctrl:"false",元:"false",来源:"u29169455861"按钮:"1",alt:"false",screenY:"148",screenX:"381",y:"18"转变:"false",谢:"13"}})