Frage

Ich bin eine GWT-Methode nativen Javascript in folgenden Weise zu exportieren:

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) {
            pl.@com.example.fbg.client.FacebookGallery::loadGallery(Ljava/lang/String;)(galleryId);
        };
    }-*/;
}

In der Host-Seite, ich versuche es aufzurufen:

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

Leider, wenn der document.ready Rückruf aufgerufen wird, wird die Funktion noch nicht definiert. Wenn manuell von der Firebug ausgeführt Konsole der Funktion ganz gut funktioniert.

Ich könnte einige Abfrage durchführen alle 50 Millisekunden, bis ich eine definierte Funktion mit diesem Namen finden, aber es scheint wie ein schrecklicher Ansatz.

Wie kann ich benachrichtigt, wenn das Modul geladen wird, und daher, wenn die Funktion zur Verfügung steht?

War es hilfreich?

Lösung

Ich würde versuchen, eine Callback-Funktion in der hostpage zu definieren und sie von GWT am Ende des onModuleLoad () -Methode aufrufen.

Hostpage Funktion:

<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();
}-*/
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top