我需要从手写的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)
是否有可能做到这一点?我尝试了几种不同的组合,声明了原生方法并使用了这个.@和实例.@没有成功.
谢谢
当然可以这样做,但你的语法是错误的.我正在打字而不编译,所以我可能会有一些拼写错误.但这就是我这样做的方式.你的方法不起作用的原因是这个变量不是你所期望的.
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)
我意识到这已经过时了但是我努力让这个工作起来,因为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新手.
| 归档时间: |
|
| 查看次数: |
7406 次 |
| 最近记录: |