gwt 2.8.0 jsinterop 导出不工作
gwt 2.8.0 jsinterop export not working
查看此文档:
https://docs.google.com/document/d/10fmlEYIHcyead_4R1S5wKGs1t2I7Fnp_PaNaa7XTEk0/edit
导出 java class 并在 java 脚本中保留其方法名称,应该与注释 class 一样简单,但似乎不起作用。
步骤如下:
在 Eclipse 中创建一个新的 GWT Web 应用程序。项目名称="jsinterop",程序包="com.example.jsinterop",使用 GWT2.8.0 并取消选中 App Engine,然后单击完成。
新建class
package com.example.jsinterop.client;
import jsinterop.annotations.*;
@JsType
public class Foo {
public int x;
public int y;
public int sum() {
return x + y;
}
}
将 JSNI 方法添加到入口点 class
public static native int callfoo() /*-{
var foo = new com.example.jsinterop.client.Foo();
foo.x = 1;
foo.y = 2;
return foo.sum();
}-*/;
在入口点调用此方法。
callfoo();
运行 应用程序将在 Chrome:
中产生这样的 java 脚本错误
Uncaught ReferenceError: com is not defined
at rb_g$ (Jsinterop.java:155)
at qb_g$.sb_g$ [as onModuleLoad_0_g$] (Jsinterop.java:77)
at Array.cyc_g$ (com_00046example_00046jsinterop_00046Jsinterop__EntryMethodHolder.java:3)
at initializeModules_0_g$ (ModuleUtils.java:44)
at MJ_g$ (Impl.java:239)
at PJ_g$ (Impl.java:298)
at Impl.java:77
at vxc_g$ (ModuleUtils.java:55)
at StringHashCache.java:23
如何让这个简单的实现工作?有什么我想念的吗?
提前致谢。
您可以将 @JsType
与特定命名空间一起使用,例如:
@JsType(namespace = JsPackage.GLOBAL)
class Foo{...}
应该在没有“com.example.jsinterop.client.
”的情况下使 Foo 在 JS 中可用
同意吗?
并考虑使用 @JsMethod(isNative = true, namespace = JsPackage.GLOBAL)
作为 JSNI 的替代品。
默认情况下不导出任何内容,您必须通过将 --generateJsInteropExports
传递给 GWT(编译器或 superdevmode)来请求它。
请注意,下一版本的 GWT 2.x 将允许您将 packages/classes 列入白名单以导出与当前全有或全无的对比。
查看此文档: https://docs.google.com/document/d/10fmlEYIHcyead_4R1S5wKGs1t2I7Fnp_PaNaa7XTEk0/edit
导出 java class 并在 java 脚本中保留其方法名称,应该与注释 class 一样简单,但似乎不起作用。
步骤如下:
package com.example.jsinterop.client;
import jsinterop.annotations.*;
@JsType
public class Foo {
public int x;
public int y;
public int sum() {
return x + y;
}
}
public static native int callfoo() /*-{
var foo = new com.example.jsinterop.client.Foo();
foo.x = 1;
foo.y = 2;
return foo.sum();
}-*/;
callfoo();
运行 应用程序将在 Chrome:
中产生这样的 java 脚本错误Uncaught ReferenceError: com is not defined
at rb_g$ (Jsinterop.java:155)
at qb_g$.sb_g$ [as onModuleLoad_0_g$] (Jsinterop.java:77)
at Array.cyc_g$ (com_00046example_00046jsinterop_00046Jsinterop__EntryMethodHolder.java:3)
at initializeModules_0_g$ (ModuleUtils.java:44)
at MJ_g$ (Impl.java:239)
at PJ_g$ (Impl.java:298)
at Impl.java:77
at vxc_g$ (ModuleUtils.java:55)
at StringHashCache.java:23
如何让这个简单的实现工作?有什么我想念的吗?
提前致谢。
您可以将 @JsType
与特定命名空间一起使用,例如:
@JsType(namespace = JsPackage.GLOBAL)
class Foo{...}
应该在没有“com.example.jsinterop.client.
”的情况下使 Foo 在 JS 中可用
同意吗?
并考虑使用 @JsMethod(isNative = true, namespace = JsPackage.GLOBAL)
作为 JSNI 的替代品。
默认情况下不导出任何内容,您必须通过将 --generateJsInteropExports
传递给 GWT(编译器或 superdevmode)来请求它。
请注意,下一版本的 GWT 2.x 将允许您将 packages/classes 列入白名单以导出与当前全有或全无的对比。