因此,我们正在尝试使用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
根据您对我的评论的反馈,我将从您的界面中删除@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 {
// . . .
}