我正在尝试使用GWT实现一个API (SCORM API)。客户端代码需要一个带有Initialize()、getLastError()等方法的API对象。
我试图将此api实现为Java对象,但我发现编译后的名称已更改,不能由客户端代码直接使用。
我看到gwt-exporter可以做到这一点(http://code.google.com/p/gwt-exporter/),但我想知道如何使用纯gwt和jsni来实现它。
由于API应该是一个对象,名为API_1484_11的对象附加到窗口对象,而不是函数,所以我不知道如何使用$entry()习惯用法。
以下是我当前失败的代码:
public final class SCORMApi {
protected SCORMApi() {}
public void Initialize(){
GWT.log("** INITIALIZE CALLED **");
}
public static void create(){
bind(new SCORMApi());
}
public static native void bind(SCORMApi api) /*-{
$wnd.API_1484_11 = api;
}-*/;
}因此,在这种情况下,我的问题是:
如何让javascript调用(例如window.API_1484_11.Initialize() )到达我的java gwt代码?
发布于 2013-01-18 00:50:59
使用您的bind方法是正确的。但是您还不了解如何在JSNI中调用Java方法。以下是在Initialize方法的情况下执行此操作的方法:
public static native void bind(SCORMApi api) /*-{
$wnd.API_1484_11 = {
initialize: function() {
$entry( api.@com.yourpackage.name.SCORMApi::Initialize()() );
}
};
}-*/;要想真正了解GWT、1和2,必须阅读有关此主题的博客。
https://stackoverflow.com/questions/14381116
复制相似问题