【问题标题】:How to access GWT's JsInterop exported types from browser console?如何从浏览器控制台访问 GWT 的 JsInterop 导出类型?
【发布时间】:2019-02-08 14:17:09
【问题描述】:

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

具体来说,我导出了一个enum:

package com.mypackage.test

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

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

文档显示如下:

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

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

【问题讨论】:

    标签: javascript java gwt


    【解决方案1】:

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

    此外,该包看起来不像您希望在 GWT 项目中看到的通常结构(即其中某处的 client,对应于您的 GWT 模块) - 您是否记得从您的 . gwt.xml 文件?

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


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

    【讨论】:

    • 有同样的问题。从 .gwt.xml 文件中引用包是什么意思?你能举个例子吗?
    • 引用包通常只是将您的.gwt.xml 文件与client 包放在同一目录中,但如果您还有其他可翻译的来源(例如,shared 包与模块文件和客户端包并行),那么您将在 .gwt.xml 文件中添加一个 <source path="shared" /> 行,以表明存在另一个与模块文件相关的包,应考虑编译。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 2022-06-11
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多