如何在GWT UiBinder中使用JavaScript回调函数?

时间:2014-03-20 00:54:11

标签: java javascript html gwt jsni

我想在移动网页上进行Facebook登录。这可以使用Facebook Login Button来完成。它很棒。我在GWT UiBinder页面中有以下代码:

<g:HTMLPanel>
    <div class="fb-login-button" data-max-rows="1" data-size="xlarge" 
                data-show-faces="false" data-auto-logout-link="false" 
                data-scope="email,publish_actions,user_birthday,user_likes" 
                onlogin="alert('I am a JavaScript callback');"></div>

</g:HTMLPanel>

如果登录成功,则调用onlogin JavaScript函数。

如何在调用此函数时以某种方式使用此回调函数来获得通知?有没有办法在这里使用JSNI或其他东西?

2 个答案:

答案 0 :(得分:1)

在您的课程中,您可以公开原生javascript方法,例如名为myOnLoadThing

class MyClass{

   MyClass(){

     expose();

     // UiBinder stuff here
   }

   // Call this once. Exports your Java method as a javascript method
   public native void expose()/*-{
       $wnd.myOnLoadThing = function(){
            @com.my.MyClass::myOnload()();
       }
    }-*/;

   public void myOnload(){
       // Put your java onload function here
   };
}

在您的uiBinder中,请务必拨打myOnLoadThing

<g:HTMLPanel>
<div class="fb-login-button" data-max-rows="1" data-size="xlarge" 
            data-show-faces="false" data-auto-logout-link="false" 
            data-scope="email,publish_actions,user_birthday,user_likes" 
            onlogin="window.myOnLoadThing();"></div>

</g:HTMLPanel>

这里也有一个很好的答案: How to call GWT java function from Javascript?

答案 1 :(得分:1)

这是基于logans答案的正确工作版本。我添加了所需的实例变量,因为myOnload()方法是非静态的。我还添加了$ entry()函数来跟踪GWT中的错误。

class MyClass{

   MyClass(){

     expose();

     // UiBinder stuff here
   }

   // Call this once. Exports your Java method as a javascript method
   public native void expose()/*-{
       var instance = this;
       $wnd.myOnLoadThing = $entry(function(){
           instance.@com.my.MyClass::myOnload()();
       });
    }-*/;

   public void myOnload(){
       // Put your java onload function here
   };
}

在您的uiBinder中,请务必拨打myOnLoadThing

<g:HTMLPanel>
<div class="fb-login-button" data-max-rows="1" data-size="xlarge" 
            data-show-faces="false" data-auto-logout-link="false" 
            data-scope="email,publish_actions,user_birthday,user_likes" 
            onlogin="window.myOnLoadThing();"></div>

</g:HTMLPanel>

这里也有一个很好的答案: How to call GWT java function from Javascript?