2010-11-17 14 views
5

estoy exportando un método GWT a JavaScript nativo de la siguiente manera:Averiguar cuando un módulo de GWT ha cargado

public class FaceBookGalleryEntryPoint implements EntryPoint { 

    @Override 
    public void onModuleLoad() { 

     FacebookGallery facebookGallery = new FacebookGallery(); 
     RootPanel.get().add(facebookGallery); 

     initLoadGallery(facebookGallery); 
    } 

    private native void initLoadGallery(FacebookGallery pl) /*-{ 
     $wnd.loadGallery = function (galleryId) { 
      [email protected]::loadGallery(Ljava/lang/String;)(galleryId); 
     }; 
    }-*/; 
} 

En la página de acogida, que estoy tratando de invocarlo:

<html> 
    <head> 
     <title>Facebook image gallery</title> 
     <script type="text/javascript" 
      src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>  
    </head> 

    <body> 
     <script type="text/javascript" src="/fbg/fbg.nocache.js"></script> 
     <h1>Facebook gallery test</h1> 
     <script type="text/javascript"> 
      $(document).ready(function() { 
       loadGallery('blargh');    
      }); 
     </script> 
    </body> 
</html> 

Desafortunadamente, cuando se invoca la devolución de llamada en documento, la función aún no está definida. Cuando se ejecuta manualmente desde la consola Firebug, la función funciona bien.

Podría realizar algunos sondeos cada 50 milisegundos hasta que encuentre una función definida con ese nombre, pero parece un enfoque horrible.

¿Cómo puedo recibir notificaciones cuando el módulo está cargado y, por lo tanto, cuando la función está disponible?

Respuesta

12

Intentaré definir una función de devolución de llamada en la página de host y llamarla desde GWT al final del método onModuleLoad().

función Hostpage:

<script type="text/javascript"> 
    function onGwtReady() { 
    loadGallery('blargh');    
    }; 
</script> 

GWT:

public void onModuleLoad() { 
    FacebookGallery facebookGallery = new FacebookGallery(); 
    RootPanel.get().add(facebookGallery); 

    initLoadGallery(facebookGallery); 

    // Using a deferred command ensures that notifyHostpage() is called after 
    // GWT initialisation is finished. 
    DeferredCommand.addCommand(new Command() { 
    public void execute() { 
     notifyHostpage(); 
    } 
} 

private native void notifyHostpage() /*-{ 
    $wnd.onGwtReady(); 
}-*/ 
+0

Gracias, parece interesante - especialmente el bit DeferredCommand. Voy a dar una oportunidad esta noche. –

+2

BTW, con GWT 2.1 debe utilizar Scheduler(). Get(). ScheduleDeferred() –

+0

Gracias por la sugerencia de Scheduler. – vanje

Cuestiones relacionadas