首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GWT JSNI方法公开

GWT JSNI方法公开
EN

Stack Overflow用户
提问于 2013-04-11 00:35:37
回答 1查看 889关注 0票数 2

我有一个关于使用JSNI公开我的一个GWT方法的问题。

我正在尝试在我的一个GWT类中公开一个方法,该方法向其他UI组件发出一条消息。

在我的应用程序入口点中,我用

代码语言:javascript
复制
   public native void exportMethods() /*-{
        $wnd.fireFoo=$entry(this.@myPackage.class_a::fireFoo(Ljava/lang/String;));
   }-*/;

class_a更新它的一个字段,然后从class_b调用一个静态方法。

代码语言:javascript
复制
   public class class_a{

       private String last_msg;

       public void fireFoo(String msg){
           this.last_msg = msg;
           class_b.foo(msg);
       }
   }

class_b调用许多其他类和静态方法来处理消息

代码语言:javascript
复制
   public class class_b{
       public static void foo(String msg){
       ...//creates a message object and sends it to UI components
       class_c.foo2(msg);
       ...
       }

   }

基本上,我所需要做的就是传递一个字符串并调用GWT方法。该方法(当从GWT调用而不是手写JS时)工作得很好。我还验证了公开的方法将触发一个简单的警报。我认为问题出在调用其他类的方法上。

我得到:"(TypeError) Unable to get property 'hv‘of undefined or null reference description.“

有没有一种方法可以将字符串传递给原始的GWT方法,而不必去暴露它最终将运行的无数其他方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-11 00:43:24

就像在JavaScript中一样,this.@myPackage.class_a::fireFoo(Ljava/lang/String;)是对方法的引用,但是它不会在那时将该方法绑定到this对象。方法内部的this将在调用函数时确定,而不是在检索引用时确定。

因此,您需要一个代理:

代码语言:javascript
复制
var that = this;
$wnd.fireFoo = $entry(function(s) {
  that.@myPackage.class_a::fireFoo(Ljava/lang/String;)(s);
});

如果它真的像你说的那样在DevMode中工作,那么它就是DevMode中的一个bug。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15931541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档