2010-11-17 4 views
5

J'exporte une méthode GWT javascript natif de la manière suivante:Trouver quand un module GWT a chargé

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

Dans la page d'accueil, je suis en train de l'appeler:

<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> 

Malheureusement, lorsque le rappel document.ready est appelé, la fonction n'est pas encore définie. Lorsqu'elle est exécutée manuellement à partir de la console Firebug, la fonction fonctionne très bien.

Je pourrais effectuer un sondage toutes les 50 millisecondes jusqu'à ce que je trouve une fonction définie par ce nom, mais cela semble être une approche horrible.

Comment puis-je être informé lorsque le module est chargé et donc quand la fonction est disponible?

Répondre

12

Je voudrais essayer de définir une fonction de rappel dans la page hôte et l'appeler à partir de GWT à la fin de la méthode onModuleLoad().

fonction 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

Merci, semble intéressant - en particulier le bit DeferredCommand. Je vais essayer ce soir. –

+2

BTW, avec GWT 2.1, vous devriez utiliser Scheduler(). Get(). ScheduleDeferred() –

+0

Merci pour l'indice Scheduler. – vanje

Questions connexes