GWT-如何从手写JavaScript调用INSTANCE Java方法?

Chi*_*sco 4 gwt

我需要从手写的Javascript调用实例Java方法.在GWT文档中,它解释了如何使用静态方法和类来执行此操作,并且它工作正常:

http://code.google.com/p/google-web-toolkit-doc-1-6/wiki/DevGuideJavaFromJavaScript (从手写JavaScript调用Java方法)

public MyUtilityClass
{
    public static int computeLoanInterest(int amt, float interestRate, 
                                          int term) { ... }
    public static native void exportStaticMethod() /*-{
       $wnd.computeLoanInterest =
          @mypackage.MyUtilityClass::computeLoanInterest(IFI);
    }-*/;
}
Run Code Online (Sandbox Code Playgroud)

是否有可能做到这一点?我尝试了几种不同的组合,声明了原生方法并使用了这个.@和实例.@没有成功.

谢谢

Dav*_*uls 5

当然可以这样做,但你的语法是错误的.我正在打字而不编译,所以我可能会有一些拼写错误.但这就是我这样做的方式.你的方法不起作用的原因是这个变量不是你所期望的.

public MyUtilityClass{    
  public static int computeLoanInterest(int amt, float interestRate, int term)  { ... }    

  public static native void exportStaticMethod() /*-{       
      var _this = this;
      $wnd.computeLoanInterest = function(amt,interestRate,term) {
          _this.@mypackage.MyUtilityClass::computeLoanInterest(IFI)(amt,interestRate,term);    
      };
  }-*/;
}
Run Code Online (Sandbox Code Playgroud)

  • 那些方法不应该是静态的 (3认同)

sum*_*umo 5

我意识到这已经过时了但是我努力让这个工作起来,因为David Nouls的答案对我来说并不完整.我不得不像这样调整它以使initComplete()调用我的实例方法initComplete()

public static native void exportInitCallback(MyComponent thiz) /*-{
    $wnd.initComplete = function (){
        thiz.@my.package.client.MyComponent::initComplete()();
    }

}-*/;
Run Code Online (Sandbox Code Playgroud)

在构建MyComponent时,我将传递给了我的静态方法.然后,全局initComplete方法正确调用实例方法.

我希望这有助于其他一些GWT新手.