0

概要

  • 次のようなGWTメソッドがあります。private void handleError()
  • 次のように呼ばれるJSNIJavascript関数があります。private native void registerErrorHandler()
  • ネイティブjavascript関数は、サードパーティのJavascriptライブラリから別の関数を呼び出します。foo.attachEvent("EventName", handlerReference);

機能性

GWTメソッドを関数パラメーターとして関数に渡す必要がありますfoo.attachEvent()。いくつかのアプローチを試しました。

foo.attachEvent("Error", registerErrorHandler);-> TypeMismatchException

foo.attachEvent("Error", this.@package.foo::registerErrorHandler());-> TypeMismatchException

var handler = this.@package.foo::registerErrorHandler()();
foo.attachEvent("Error", handler);

-> TypeMismatchException

プレーンJavascript

これをプレーンなJavascriptで書くと、機能します。

function handleError() {
    alert("Error");
}
function registerErrorHandler() {
    var event = "Error";
    var handler = handleError;

    foo.attachEvent (event, handler);
}

どうすればそれをGWTに実装できますか?Javascript-Javaオブジェクト変換を完全に理解するのに多くの問題があります。handleError関数参照をとして理解していますJavaScriptObjectが、その情報で機能させることができません。

4

1 に答える 1

0

コードは次のようになっている必要があります:(中括弧は1つしかないため、関数は実行されません...)

var handler = this.@package.foo::registerErrorHandler();
foo.attachEvent("Error", handler);

ただし、関数を$ entry関数でラップして、キャッチされなかった例外ハンドラーが機能するようにすることもできます。

var handler = this.@package.foo::registerErrorHandler();
foo.attachEvent("Error", $entry(handler));

常にできることは、gwt関数を直接呼び出すjs関数を作成することです。

var that = this;
var handler = function(){
    that.@package.foo::registerErrorHandler()();
};
foo.attachEvent("Error", $entry(handler));
于 2012-07-11T07:54:57.830 に答える