使用 JsInterop 包装简单的 JavaScript 插件
Wrap simple JavaScript plugin using JsInterop
我目前正在将我的 Gwt 2.7 项目升级到 2.8-beta1 并且我正在尝试重构 Javascript 从 JSNI 到 JsInterop.
的插件包装器
这里是 JSNI 包装器:
public class MyPlugin extends JavaScriptObject {
protected MyPlugin(){
}
public static native MyPlugin init(MyPluginConfig config) /*-{
return new $wnd.MyPlugin(config);
}-*/;
public final native void addItem(MyPluginItem item) /*-{
this.addItem(item);
}-*/;
public final native void setEnable(int itemIndex, boolean enable) /*-{
this.setEnable(itemIndex, enable);
}-*/;
}
我尝试过的:
@JsType(namespace = JsPackage.GLOBAL, isNative = true)
public class MyPlugin {
public static native MyPlugin init(MyPluginConfig config);
public native void addItem(MyPluginItem item);
public native void setEnable(int itemIndex, boolean enable);
}
问题,我不知道如何包装构造函数。
在 JsInterop doc
A native @JsType class can only have
Public native methods,
Public and uninitialized fields,
Empty constructor,
Final non-native methods that doesn’t override any other methods,
所以,这是我的问题:如何包装一个 JavaScript 插件,在 JS 中,构造函数在 JsInterop 中看起来像 var myPlugin = MyPlugin({option1 : value1, option2 : value2,...});
?
感谢您的帮助:)
好的,我找到了解决方案。
只需声明一个带有参数和空内容的构造函数:
@JsType(namespace = JsPackage.GLOBAL, isNative = true)
public class MyPlugin {
public MyPlugin(MyPluginConfig config) {} //<--- here
public native void addItem(MyPluginItem item);
public native void setEnable(int itemIndex, boolean enable);
}
而且有效。
希望对其他人有所帮助:)
编辑:MyPluginConfig 结构
MyPluginConfig 只是一个 POJO class。
@JsType(namespace = JsPackage.GLOBAL, isNative = true, name = "Object")
public class MyPluginConfig {
@JsProperty public void setXXXX(String str);
@JsProperty public String getXXXX();
...
}
我目前正在将我的 Gwt 2.7 项目升级到 2.8-beta1 并且我正在尝试重构 Javascript 从 JSNI 到 JsInterop.
的插件包装器这里是 JSNI 包装器:
public class MyPlugin extends JavaScriptObject {
protected MyPlugin(){
}
public static native MyPlugin init(MyPluginConfig config) /*-{
return new $wnd.MyPlugin(config);
}-*/;
public final native void addItem(MyPluginItem item) /*-{
this.addItem(item);
}-*/;
public final native void setEnable(int itemIndex, boolean enable) /*-{
this.setEnable(itemIndex, enable);
}-*/;
}
我尝试过的:
@JsType(namespace = JsPackage.GLOBAL, isNative = true)
public class MyPlugin {
public static native MyPlugin init(MyPluginConfig config);
public native void addItem(MyPluginItem item);
public native void setEnable(int itemIndex, boolean enable);
}
问题,我不知道如何包装构造函数。 在 JsInterop doc
A native @JsType class can only have Public native methods, Public and uninitialized fields, Empty constructor, Final non-native methods that doesn’t override any other methods,
所以,这是我的问题:如何包装一个 JavaScript 插件,在 JS 中,构造函数在 JsInterop 中看起来像 var myPlugin = MyPlugin({option1 : value1, option2 : value2,...});
?
感谢您的帮助:)
好的,我找到了解决方案。
只需声明一个带有参数和空内容的构造函数:
@JsType(namespace = JsPackage.GLOBAL, isNative = true)
public class MyPlugin {
public MyPlugin(MyPluginConfig config) {} //<--- here
public native void addItem(MyPluginItem item);
public native void setEnable(int itemIndex, boolean enable);
}
而且有效。
希望对其他人有所帮助:)
编辑:MyPluginConfig 结构
MyPluginConfig 只是一个 POJO class。
@JsType(namespace = JsPackage.GLOBAL, isNative = true, name = "Object")
public class MyPluginConfig {
@JsProperty public void setXXXX(String str);
@JsProperty public String getXXXX();
...
}