簡體   English   中英

GWT JSNI方法暴露

[英]GWT JSNI method exposure

我有一個關於使用JSNI公開我的GWT方法之一的問題。

我正在嘗試在我的GWT類之一中公開一個方法,該方法將消息發送到其他UI組件。

在我的應用程序入口點,我用

   public native void exportMethods() /*-{
        $wnd.fireFoo=$entry(this.@myPackage.class_a::fireFoo(Ljava/lang/String;));
   }-*/;

class_a更新其字段之一,然后從class_b調用靜態方法。

   public class class_a{

       private String last_msg;

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

class_b調用許多其他類和靜態方法來處理味精

   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)無法獲取未定義或空引用描述的屬性'hv'。”

有沒有一種方法可以將字符串傳遞給原始的GWT方法,而不必暴露最終將要運行的無數其他方法?

就像在JavaScript中一樣, this.@myPackage.class_a::fireFoo(Ljava/lang/String;)是對方法的引用,但當時並未將該方法綁定this對象。 方法內部的this將在調用函數時確定, 而不是在檢索引用時確定。

因此,您需要一個代表

var that = this;
$wnd.fireFoo = $entry(function(s) {
  that.@myPackage.class_a::fireFoo(Ljava/lang/String;)(s);
});

如果確實按照您所說的在DevMode中工作,那么這是DevMode中的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM