だから私はGWTアプリを持っていて、外側のボタンからアプリのビューを変更する関数を呼び出そうとしています。通常、これは「this.internalFunction('string')」として呼び出されます。問題は、JSNI が静的メソッドを介して動作するため、問題のオブジェクトが失われることです。解決策: アプリのオブジェクト自体を JSNI 呼び出しに渡し、そこからそのオブジェクトの関数呼び出しを呼び出します。解決策の問題: これは機能しません。:(
クラスは次のようになります。
package blah.package;
public class Foo implements A, B {
public native void initChangeFunc() /*-{
$wnd.jsChangeView = $entry(this.@blah.package.Foo::doSomething
(Lblah.package.Foo;)(this));
//Pass this to the function call to do calls on app object
}-*/;
public void doSomething(Foo obj) {
//Change view here.
obj.internalFunction("parameter");
};
public void internalFunction(String param) {
//Do stuff with param.
}
}
モジュールのロード時に、initChangeFunc() を呼び出し、ページ自体の jsChangeView() にアクセスします。
コンパイル エラーは、コンパイラが blah.package.Foo を見つけられないことを示しています。これは、パラメーターの型シグネチャ (Lblah.package.Foo の部分) が間違っているためです。
[ERROR] Line 64: Expected a valid parameter type signature in JSNI method reference