[英]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.