将Javascript捆绑到GWT应用程序中

时间:2010-11-20 11:26:56

标签: gwt

我在GWT(mapfaire.com)中编写了一个使用Google Maps API的应用,我想使用utilities library。为库编写JSNI包装器不是问题,但是如何确保编译器将JS“烘焙”到应用程序本身,而不是通过module script include单独下载?

4 个答案:

答案 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对您的需求有用吗?