2011-11-01 24 views
10

Tengo un widget que depende de algunos archivos JS externos, y me gustaría cargar todos estos recursos externos. Ya he usado la división de código para cargar el código GWT que concierne al widget, pero los archivos JS definidos en gwt.xml, usando la etiqueta script, se cargan de todos modos, lo cual no es deseable.GWT: carga diferida de recursos de JS externos

¿Existe una forma estándar de GWT de cargar estos recursos externos bajo demanda? Puedo hacerlo usando JS en bruto, pero prefiero no perder tiempo en esto también.

+0

Aún hay más discusión sobre esto en el grupo de GWT Google: ["¿Cómo incluir bibliotecas de JavaScript de terceros en una biblioteca/widget de gwt reutilizable?"] (Https://groups.google.com/d/topic/ google-web-toolkit/Xiz8XmPhJzo/discussion) – blong

Respuesta

16

Creo que querrá echarle un vistazo a la clase com.google.gwt.core.client.ScriptInjector. From the javadocs:

Cree dinámicamente una etiqueta de script y adjúntela al DOM.

...

uso con la escritura carga como un URL:

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(); 

Este código puede por supuesto ser invocado desde el interior de sus puntos de división, o de hecho cualquier parte del código.

+0

¡Brillante! Gracias Colin. Aunque, ahora tendré que migrar de 2.3 a 2.4 :) Veré cómo funciona. –

+1

2.3 a 2.4 no debería ser un gran problema, pero si lo es, puede ver cómo funciona ScriptInjector.fromUrl con ScriptElement y puede compilarlo en su aplicación sin actualizar. –

1

ScriptInjector es bastante portátil. No tiene dependencias externas, por lo que debería poder respaldarlo en su aplicación 2.3 sin muchos problemas.