1

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;
    }-*/;

}

したがって、この文脈では、私の質問は次のとおりです。

window.API_1484_11.Initialize()Java gwt コードに到達するための JavaScript 呼び出し (例: ) を取得するにはどうすればよいですか?

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()() );
        }
    };
}-*/;

ブログ Getting To Really Know GWT パート1および2は、この件に関して必読です。

于 2013-01-17T16:50:59.167 に答える