GWT JsInterop - расширение интерфейса Java в JavaScript - PullRequest
0 голосов
/ 30 апреля 2020

Итак, мы пытаемся использовать JsInterop, чтобы в нашем приложении GWT мы могли использовать некоторые модули, созданные извне в JavaScript.

У нас есть интерфейс с контрактом, некоторые методы должны быть реализуется всеми видами.

Например:

package com.foo;

import jsinterop.annotations.JsPackage;
import jsinterop.annotations.JsType;

@JsType(namespace = JsPackage.GLOBAL) 
public interface MyView {

    void doSomething();
    void doSomethingElse();
    Element getElement();   
}

Теперь представьте, что со стороны JS у нас есть реализация этого интерфейса:

export class MyViewImplementation extends window.$wnd.MyView {

  constructor() {
    super();
  }

  doSometing() {
    //Implementation goes here
  }

  doSomethingElse() {
    //Implementation goes here
  }

  getElement() {
    var div = document.createElement("div");
    div.textContent = "External Component Test";
    return div;
  }
}

Может ли это работать? В настоящее время у меня есть ошибка, которая говорит: класс расширяет значение undefined не является конструктором или нуль

1 Ответ

0 голосов
/ 30 апреля 2020

Исходя из вашего отзыва на мой комментарий, я бы удалил @JsType из вашего интерфейса и ввел класс с @JsType(isNative=true), который реализует интерфейс.

public interface MyView {

    void doSomething();
    void doSomethingElse();
    Element getElement();   
}

public class JavaView implements MyView {
    // . . .
}

@JsType(isNative = true, namespace = JsPackage.GLOBAL)
public class JsView implements MyView {

    @Override
    public native void doSomething();

    @Override
    public native void doSomethingElse();

    @Override
    public native Element getElement();   
}

Затем в JavaScript:

export class JsView {
    // . . .
}
...