GWT监听外部自定义Javascript事件



我正在开发一个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事件。

主要问题是你必须能够访问你的JS代码。

相关内容

  • 没有找到相关文章

最新更新