これをバグレポートとして提出するつもりですが、ここの誰かが私がしていることに何か問題があるのを見ることができるかどうかを確認したかったのです。
GWTクラスからJSNIを介してインスタンスメソッドを公開するthis
と、JavaScriptで期待どおりに機能します。this
Javaをクロスコンパイルしているので、代わりにインスタンスに自動的にバインドされることを期待します。例えば:
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);
}-*/;
これは好みとして見ることもでき、関数がバインドされていないままでいることを好む人もいます。現在の機能は直感的ではなく、不要だと思います。this
Javaコードで直接アンバウンドするユースケースを想像することはできません。また、一部のブラウザは実装されていないbind(1)
ため、私の回避策は堅牢ではありません。