1

これをバグレポートとして提出するつもりですが、ここの誰かが私がしていることに何か問題があるのを見ることができるかどうかを確認したかったのです。

GWTクラスからJSNIを介してインスタンスメソッドを公開するthisと、JavaScriptで期待どおりに機能します。thisJavaをクロスコンパイルしているので、代わりにインスタンスに自動的にバインドされることを期待します。例えば:

package com.test;
class Foo {

    public void instanceFunction() {
        this.otherFunction() // will cause an error when called from JSNI!
    }

    public void otherFunction() {
        // does some stuff
    }

    public native JavaScriptObject getInstanceFunction() /*-{
        return this.@com.test.Foo::instanceFunction();
    }-*/;

}

現在の回避策は、関数を自分でバインドすることです(移植性はあまり高くありません)。

    public native JavaScriptObject getInstanceFunction() /*-{
        return this.@com.test.Foo::instanceFunction().bind(this);
    }-*/;

これは好みとして見ることもでき、関数がバインドされていないままでいることを好む人もいます。現在の機能は直感的ではなく、不要だと思います。thisJavaコードで直接アンバウンドするユースケースを想像することはできません。また、一部のブラウザは実装されていないbind(1)ため、私の回避策は堅牢ではありません。

4

1 に答える 1

4

ポータブルが必要な場合は、次bindのように簡単です。

var that = this;
return $entry(function() {
   return that.@com.test.Foo::instanceFunction()();
});
于 2012-11-20T14:01:28.137 に答える