首页 > 解决方案 > GWT JsInterop - 在 JavaScript 中扩展 Java 接口

问题描述

因此,我们正在尝试使用 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;
  }
}

这能行吗?目前,我有一个错误说:Class extends value undefined is not a constructor or null

标签: gwtgwt-jsinterop

解决方案


根据您对我的评论的反馈,我@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 {
    // . . .
}

推荐阅读