我正在开发一个GWT应用程序,我想让该应用程序监听外部自定义javascript事件。这些事件将从我的模块外部触发。
基本上,就像你在带有一些jQuery的基本web应用程序中所做的那样:
$('#foo').bind('customEvent', function() {
...
});
...
$('#foo').trigger('customEvent');
我试图通过覆盖我的Composite中的onAttach方法来实现GWTQuery:
@Override
protected void onAttach() {
super.onAttach();
$("#mainView").bind("refreshSheet", new Function() {
public boolean f(Event e) {
refreshSheet();
return true;
}
});
}
这不起作用,在我没有在另一方触发事件时调用回调函数。
你有什么建议来实现这个目标?
答案 0 :(得分:2)
我遇到了同样的问题。在下面的解决方案中,我通过调用生成GWT事件的Java方法(来自我的Javascript代码)从JS发送事件。所以这是我的建议:
JS中的:
window.parent.sendEvent(evendID, eventBody)
(我不得不将window.parent称为GWT,JS分别位于2个不同的帧中)
但在我按照https://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsJSNI#calling
中的解释注册GWT中的方法(见下文)之前 GWT中的:
package com.mypackage.client;
class myclass {
public static int generateEvent(int eventID, String eventBody) { ...... }
public static native void exportStaticMethod() /*-{
$wnd.sendEvent=
$entry(@com.mypackage.client.myclass::generateEvent(ILjava/lang/String;));
}-*/;
}
其中我是evendID(JNI中的整数)和Ljava / lang / String;是eventBody字符串。 您必须从onModuleLoad()方法调用此方法exportStaticMethod()。
myclass中的generateEvent()方法然后生成一个GWT自定义事件(如Abhijith链接中的解释)。所以我不会通过这种方式通过JS堆栈从JS向GWT广播一个事件,但是我在java / GWT端保持了一个干净的架构。
我看到的主要优点是它最小化了JS代码的大小,并且很容易使用GWT.event和JS事件之间的任何未来桥接进行更新。
主要问题是您必须能够访问您的JS代码。