2

我正在开发一个 GWT 应用程序,我想让该应用程序监听外部自定义 Javascript 事件。这些事件将从我的模块外部触发。

基本上,就像您在带有一些 jQuery 的基本 Web 应用程序中所做的一样:

$('#foo').bind('customEvent', function() {
    ...
});
...
$('#foo').trigger('customEvent');

onAttach我试图通过覆盖我的 Composite 中的方法来使用 GWTQuery 来实现这一点:

@Override
protected void onAttach() {
    super.onAttach();
    $("#mainView").bind("refreshSheet", new Function() {
        public boolean f(Event e) {
            refreshSheet();
            return true;
        }
    });
}

这不起作用,正在调用回调函数,而我还没有触发另一端的事件。

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

4

1 回答 1

2

我有同样的问题。在下面的解决方案中,我通过调用生成 GWT 事件的 Java 方法(来自我的 Javascript 代码)从 JS 发送事件。所以这是我的建议:

在 JS 中:

window.parent.sendEvent(evendID, eventBody)

(我不得不调用 window.parent,因为 GWT 和 JS 在 2 个单独的框架中)

但在我在 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;));
}-*/;
}

其中我是 eventdID(JNI 中的整数)和 Ljava/lang/String;是 eventBody 字符串。您必须从 onModuleLoad() 方法调用此方法 exportStaticMethod()。

myclass 中的 generateEvent() 方法然后生成 GWT 自定义事件(如 Abhijith 的链接中所述)。所以我不会以这种方式通过 JS 堆栈将事件从 JS 广播到 GWT,但我在 java/GWT 端保持了一个干净的架构。

我看到的主要优点是它最小化了 JS 代码的大小,并且很容易通过 GWT.event 和 JS 事件之间的任何未来桥梁进行更新。

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

于 2013-04-30T05:16:46.753 回答