我正在运行GWT应用程序,我想使用JsInterop快速测试一些东西。
具体地说,我导出了一个enum
:
package com.mypackage.test
@JsType
enum MyEnum {
A,
B,
C;
}
我想在编写任何代码之前检查是否可以正确访问它。
文档显示如下内容:
var aClass = new com.gwt.example.MyClass('World');
但是com
中没有定义Window
。那么如何在编写代码之前从控制台访问JsInterop进行测试呢?
答案 0 :(得分:3)
您是否还记得将-generateJsInteropExports
标志传递给编译器(以及超级开发模式)?没有它,GWT将不会导出类型,因为那样会增加输出大小。
此外,该程序包看起来不像您希望在GWT项目中看到的常规结构(即,其中的client
对应于您的GWT模块)-您是否记得从以下地方引用过此程序包?您的.gwt.xml文件?
也可能应该是public
-JsInterop代码默认不显示不可见成员(因为它们不是公共成员,因此不假定在其他地方使用)。我不确定这是否适用于类型,还是仅适用于成员。
最后,请注意,使用JsType标记Java enum
并不能神奇地使它们在JS中有意义-在指定的包中将存在MyEnum类型,并且每个静态成员都会存在,但它们将是不透明的JS对象,而不是字符串或可以轻松与之交互的其他对象,除非您还在该类的方法上添加其他jsinterop注释。 J2CL支持@JsEnum
,尽管它会自动将它们全部转换为数字常量,但这尚未移植到GWT2。