GWT收听外部自定义javascript事件

时间:2013-03-06 08:22:29

标签: gwt javascript-events event-handling gwtquery

我正在开发一个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;
        }
    });
}

这不起作用,在我没有在另一方触发事件时调用回调函数。

你有什么建议来实现这个目标?

1 个答案:

答案 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代码。