在GWT java代码中注册javascript方法,以便可以根据GWT中的事件调用该方法

Registering a javascript method in GWT java code so that it can be invoked based on an event in GWT

本文关键字:方法 GWT 事件 调用 代码 java 注册 javascript      更新时间:2023-09-26

我试着寻找一个类似的帖子,但找不到任何,因此发布此查询以寻求您的帮助。实际上,我在GWT端创建了一个自定义UI。现在,我想将GWT端发生的事件发送到javascript/jsp页面。为此,我想知道是否有一种方法可以让jsp/javascript在GWT代码中注册一个方法,并且无论何时,在GWT端发生任何事件,GWT java代码都可以简单地调用这个javascript方法(类似于函数指针/对象),并且信息将在jsp页面上得到通知。虽然我可以在GWT代码中直接调用javascript方法,但是,这意味着GWT代码还需要知道javascript方法的名称,这导致了紧密耦合。相反,javascript可以简单地将函数句柄传递给GWT代码,GWT代码将简单地调用该句柄来传递jsp/javascript代码上的必要事件。如果有什么建议的话,我会很有帮助的。

您可以使用Dictionary将函数名称传递给应用程序。

在JSP主机页面中:
<script type="text/javascript">
  function myFunction() {
    // Do stuff...
  }
  var MyDictionary = {
    myCallback = "myFunction"
  };
</script>

在你的应用程序中:

public void onEvent(EventType event) {
  Dictionary d = Dictionary.getDictionary("MyDictionary");
  invokeNativeCallback(d.get("myCallback"));
}
private native void invokeNativeCallback(String callbackName) /*-{
  if (typeof $wnd[callbackName] === "function") {
    $wnd[callbackName]();
  }
}-*/;