GWT JsInterop - 在 JavaScript 中扩展 Java 接口
GWT JsInterop - extending a Java interface in JavaScript
因此,我们正在尝试使用 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 不是构造函数或 null
根据您对我的评论的反馈,我将从您的界面中删除 @JsType
并引入 class 和 @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 {
// . . .
}
因此,我们正在尝试使用 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 不是构造函数或 null
根据您对我的评论的反馈,我将从您的界面中删除 @JsType
并引入 class 和 @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 {
// . . .
}