代码之家  ›  专栏  ›  技术社区  ›  Robert Munteanu

找出GWT模块何时加载

  •  5
  • Robert Munteanu  · 技术社区  · 13 年前

    我正在以以下方式将GWT方法导出到本机javascript:

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

    在主机页中,我试图调用它:

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

    不幸的是,当调用document.ready回调时,函数尚未定义。当从Firebug控制台手动执行时,该函数工作正常。

    我可以每50毫秒执行一次轮询,直到找到一个用该名称定义的函数,但这看起来是一个可怕的方法。

    如何在加载模块并因此在函数可用时获得通知?

    1 回复  |  直到 13 年前
        1
  •  12
  •   vanje    13 年前

    我将尝试在hostpage中定义一个回调函数,并在onModuleLoad()方法的末尾从GWT调用它。

    主机页函数:

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

    吉瓦特:

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