Gwt elemental2:如何在gwt JavaScript对象和JsInterop对象之间进行转换?

Cas*_*dan 1 gwt gwt-elemental gwt-jsinterop

让我说我有一个com.google.gwt.dom.client.Document gwtDocument节点,我想将其转换为elemental2.dom.Document

由于Document扩展了JavaScriptObject,我认为我可以做类似的事情:

elemental2.dom.Document elementalDoc = (elemental2.dom.Document)(gwtDocument);
Run Code Online (Sandbox Code Playgroud)

但是,使用jsinterop的elemental2类不会扩展JavaScriptObject.那么如何在两者之间进行转换呢?

谢谢!

Ign*_*aca 6

您可以转换为对象并转换为元素类型(示例1).这有点难看,所以有一个实用程序库可以在GWT和未来的J2CL编译器中使用,称为jsinterop-base.该Js实用程序可用于cast(2)和uncheckedCast(3)任何对象.该uncheckedCast应避免与只用,如果你知道你在做什么(例如:I帧之间铸造失败,或其他特殊情况的js).

com.google.gwt.dom.client.Document gwtDocument = Document.get();
elemental2.dom.Document el1 = (elemental2.dom.Document) (Object) gwtDocument; //(1)
elemental2.dom.Document el2 = jsinterop.base.Js.cast(gwtDocument); //(2)
elemental2.dom.Document el3 = jsinterop.base.Js.uncheckedCast(gwtDocument); //(3)
Run Code Online (Sandbox Code Playgroud)

因此,在客户端代码中,您应该使用Js.castGWTdom实例转换为elemental2实例.