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调用许多其他类和静态方法来处理msg
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)无法获得未定义或null引用描述的属性'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下的一个bug。
相关文章:
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 数组在递归方法中设置为null
- 打破承诺链的好方法是什么
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- 使用“;这个“;JavaScript原型方法中的关键字
- 序列化数据属性中对象的最可靠方法
- 使用Objective-C的JavaScript注入方法
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- GWT:可以从外部JavaScript而不是JSNI调用Java方法吗
- 如何将剪切/粘贴(通过jsni)方法注册到RichTextArea
- 如何在纯Java环境中处理JSNI方法
- 将Java回调函数传递给JSNI方法
- 从 JSNI 调用 Java 方法
- GWT JSNI 方法与本机 JS:“无效标签”
- 使用GWT'从java方法获取返回值;s JSNI
- 如何从GWT中的JSNI方法调用JSNI方法
- GWT JSNI -调用特定对象的java方法
- GWT JSNI方法公开
- 使用JSNI从手写的Javascript调用JAVA方法