我在GWT(mapfaire.com)中编写了一个使用Google Maps API的应用,我想使用utilities library。为库编写JSNI包装器不是问题,但是如何确保编译器将JS“烘焙”到应用程序本身,而不是通过module script include单独下载?
答案 0 :(得分:8)
您可以为您的JavaScript资源定义ClientBundle,如下所示:
public interface JsResources extends ClientBundle {
final JsResources INSTANCE = GWT.create(JsResources.class);
@Source("myAwesomeJavaScript.js")
TextResource myAwesomeJavaScript();
}
并使用ScriptInjector将其包含在您的应用中:
ScriptInjector
.fromString( JsResources.INSTANCE.myAwesomeJavaScript().getText() )
.inject();
答案 1 :(得分:6)
在gwt 2.4中添加了ScriptInjector http://gwt-code-reviews.appspot.com/1451818/
ScriptInjector.fromUrl("http://example.com/foo.js").setCallback(
new Callback<Void, Exception>() {
public void onFailure(Exception reason) {
Window.alert("Script load failed.");
}
public void onSuccess(Void result) {
Window.alert("Script load success.");
}
}).inject();
答案 2 :(得分:2)
如果许可证允许您这样做,那么您可以将库的整个JS代码复制并粘贴到JSNI方法中。
你也可以使用这样的TextResource:
public static interface Resources extends ClientBundle {
@Source("some.js")
TextResource someJs();
}
public void onModuleLoad() {
final Resources resources = GWT.create(Resources.class);
eval(resources.someJs().getText());
}
private static native void eval(String s) /*-{
eval(s);
}-*/;
“some.js”的文本将直接插入到生成的应用程序中。不会有任何单独的下载。
答案 3 :(得分:0)
gwt-maps-utility project对您的需求有用吗?