GWT JsInterop-在JavaScript中扩展Java接口

问题描述 投票:0回答:1

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

可以工作吗?目前,我有一个错误提示:类扩展未定义的值不是构造函数或为null

gwt gwt-jsinterop
1个回答
0
投票

根据您对我的评论的反馈,我将从您的界面中删除@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 {
    // . . .
}
© www.soinside.com 2019 - 2024. All rights reserved.