最后,我们已经有了一些工作GWT-杰克逊APT处理器和正确生成代码我的课,剩下的打嗝我有一个是,由于某种原因,GWT-杰克逊倾向于使用窗口JSON字符串化(解析)功能。
$wnd.window.JSON.stringify(STRING)
问题是,由于这是一个网络工作者,$ wnd.window没有定义。尽管JSON.stringify()是在网络工作者提供,其结果是,该代码将无法正常运行,即使我上传之前修改它只是JSON.stringify(),虽然它的工作原理pefectly。
有没有干净的方式重新定义,其中这些功能被在这种情况下使用?
什么是要去了解如何修正此让我的网络工作人员的代码不会尝试调用所不具备在其背景下的功能的最佳手段。
图书馆现在使用JSON Global.JSON.stringify
的elemental2版本
如果我们看一下JSON在全球类的实现,我们会发现,它被分配到这里的窗口实例:
@JsType(isNative = true, name = "window", namespace = JsPackage.GLOBAL)
public class Global {
public static JSONType JSON;
}
当这个被用作从GWT Java代码编译Global.JSON.stringify(someJsonObject)
时会产生$wnd.window.JSON.stringify(someJsonObject)
或非常类似的东西。
为了解决这个问题,我们需要访问本地JSON在不挂靠当前窗口实例的方式不同。
一个解决方案是使用JsInterop直接与JSON接口,这样的事情
@JsType(isNative = true, namespace = JsPackage.GLOBAL)
public class JSON {
public native static String stringify(Object jsonObj);
}
与此实现,我们可以使用JSON没有窗户的前缀,当我们用它在Java中这样JSON.stringify(someJsonObject)
并注意我们如何不再使用来自Global
我们最终生成的js,看起来像这样$wnd.JSON.stringify(someJsonObject)
的一个
我运行一个小的测试,并在杰克逊容易LIB实现这个JSON和切换到使用新的执行,而不是使用Global.JSON
并通过了所有测试。
对我来说这看起来像是在项目库中报告一个好问题。我会尽快应用修复。