2010-11-20 21 views

Respuesta

6

En GWT 2.4 añade 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(); 
+0

Whoa Parece que ha recorrido un largo camino desde 1,6:. D –

2

Si la licencia permite que lo haga, entonces se podría copiar y pegar todo el código JS de la biblioteca en un método JSNI.

También puede utilizar un TextResource así:

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); 
}-*/; 

El texto de "some.js" será internado directamente en la aplicación resultante. No habrá ninguna descarga por separado.

+0

Sí, podría, pero realmente quiero algo c más delgado. Y podría tener los archivos movidos durante la compilación como una dependencia. –

+0

@Sudhir: Lo entiendo completamente. Sin embargo, gwtc es solo un compilador/convertidor de Java a JavaScript, que además puede incluir JavaScript por JSNI. Entonces no veo una forma directa. Tal vez pueda construir una solución indirecta como esta: incluya el código JS como TextResource (ClientBundle), luego evalúe el texto en JSNI. ¡No he intentado esto todavía! –

+0

En este momento, puede marcar un archivo js como un recurso de script y asegurarse de que se descargue antes de ejecutar el módulo. Estoy intentando ver si alguien sabe cómo puedo decirle a GWT que coloque este archivo en el módulo. Todavía haría exactamente lo mismo, con menos solicitudes. –

0

¿Está el gwt-maps-utility project útil para sus necesidades?

+0

No, estoy en v3, y nadie parece tener las utilidades del puerto GWT para v3 aún :( –

8

Se podría definir un ClientBundle para sus recursos de JavaScript así:

public interface JsResources extends ClientBundle { 
    final JsResources INSTANCE = GWT.create(JsResources.class); 

    @Source("myAwesomeJavaScript.js") 
    TextResource myAwesomeJavaScript(); 
} 

e incluirlo en su aplicación con el ScriptInjector:

ScriptInjector 
    .fromString(JsResources.INSTANCE.myAwesomeJavaScript().getText()) 
    .inject(); 
+3

imo esta es la mejor solución, la agrupación de los js en un textresource reducirá una solicitud HTTP adicional para cargar el js. –

Cuestiones relacionadas