我正在开发一个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;
}
});
}
这是不工作,回调函数被调用,而我还没有触发另一边的事件。
你有什么建议来实现这个目标?
我也遇到了同样的问题。在下面的解决方案中,我通过调用生成GWT事件的Java方法(从我的Javascript代码中)从JS发送事件。我的建议是:
在JS:
window.parent.sendEvent(evendID, eventBody)
我不得不打电话给窗口。(因为GWT和JS在两个独立的框架中)
,但在我在GWT中注册该方法之前(见下文),如https://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsJSNI#calling
中所解释的在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;));
}-*/;
}
where I is evendID (Integer in JNI) and Ljava/lang/String;是eventBody字符串。你必须从你的onModuleLoad()方法中调用这个方法exportStaticMethod()。
然后,myclass中的generateEvent()方法生成GWT自定义事件(如Abhijith提供的链接所示)。因此,我不会通过这种方式将事件从JS广播到GWT,但是我在java/GWT端保持了一个干净的架构。我看到的主要优点是它最小化了JS代码的大小,并且很容易使用GWT之间的任何未来桥梁进行更新。事件和JS事件。