如何从浏览器控制台访问GWT的JsInterop导出类型?

时间:2019-02-08 14:17:10

标签: javascript java gwt

我正在运行GWT应用程序,我想使用JsInterop快速测试一些东西。

具体地说,我导出了一个enum

package com.mypackage.test

@JsType
enum MyEnum {
    A,
    B,
    C;
}

我想在编写任何代码之前检查是否可以正确访问它。

文档显示如下内容:

var aClass = new com.gwt.example.MyClass('World');

但是com中没有定义Window。那么如何在编写代码之前从控制台访问JsInterop进行测试呢?

1 个答案:

答案 0 :(得分:3)

您是否还记得将-generateJsInteropExports标志传递给编译器(以及超级开发模式)?没有它,GWT将不会导出类型,因为那样会增加输出大小。

此外,该程序包看起来不像您希望在GWT项目中看到的常规结构(即,其中的client对应于您的GWT模块)-您是否记得从以下地方引用过此程序包?您的.gwt.xml文件?

也可能应该是public-JsInterop代码默认不显示不可见成员(因为它们不是公共成员,因此不假定在其他地方使用)。我不确定这是否适用于类型,还是仅适用于成员。


最后,请注意,使用JsType标记Java enum并不能神奇地使它们在JS中有意义-在指定的包中将存在MyEnum类型,并且每个静态成员都会存在,但它们将是不透明的JS对象,而不是字符串或可以轻松与之交互的其他对象,除非您还在该类的方法上添加其他jsinterop注释。 J2CL支持@JsEnum,尽管它会自动将它们全部转换为数字常量,但这尚未移植到GWT2。