Gwt elemental2: Как я могу конвертировать между объектом JavaScript gwt и объектом JsInterop?
Допустим, у меня есть com.google.gwt.dom.client.Document gwtDocument
узел, и я хочу преобразовать его в elemental2.dom.Document
?
Поскольку Document расширяет JavaScriptObject, я предположил, что мог бы сделать что-то вроде:
elemental2.dom.Document elementalDoc = (elemental2.dom.Document)(gwtDocument);
Однако классы elemental2, использующие jsinterop, не расширяют JavaScriptObject. Так как я могу конвертировать между двумя?
Спасибо!
1 ответ
Вы можете просто привести к объекту и привести к элементному типу (пример 1). Это немного уродливо, поэтому есть утилита lib, которую можно использовать в GWT и будущий J2CL-компилятор под названием jsinterop-base. Js
утилита может быть использована для cast
(2) и uncheckedCast
(3) любой объект. uncheckedCast
его следует избегать и использовать только в том случае, если вы знаете, что делаете (например, произойдет сбой приведения между iframes или в других особых js-ситуациях).
com.google.gwt.dom.client.Document gwtDocument = Document.get();
elemental2.dom.Document el1 = (elemental2.dom.Document) (Object) gwtDocument;
elemental2.dom.Document el2 = jsinterop.base.Js.cast(gwtDocument);
elemental2.dom.Document el3 = jsinterop.base.Js.uncheckedCast(gwtDocument);
Таким образом, в коде клиента, вы должны использовать Js.cast
транслировать GWT
Дом инстанс elemental2
экземпляров.