如何使用JSNI实现javascript API?

时间:2013-01-17 14:21:59

标签: gwt jsni

我正在尝试使用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代码?

1 个答案:

答案 0 :(得分: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部分12的博客需要阅读此主题。