1

我正在尝试使用 GWT 实现 API(SCORM API)。客户端代码需要一个 API 对象,其中包含 Initialize()、getLastError() 等方法......

我尝试将此 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 代码?

4

1 回答 1

3

你的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部分。

于 2013-01-17T16:50:59.167 回答