ネイティブJavaScriptコードのほとんどをJSNIメソッドからスクリプトに移動し、ネイティブJSNIメソッドを利用してそれらの外部メソッドを呼び出そうとしています。
現在、クリックハンドラーの1つで問題が発生しています。ユーザーが特定の要素をクリックすると、JSNIメソッドはJQueryベースのアニメーションを実行し、コールバックでJavaメソッドを呼び出します。簡単な例は次のとおりです。
public native void attachClickHandler(SomeCustomPanel customPanel) /*-{
$wnd.jQuery("#theElement").click(function() {
// some JQuery animation logic here...
$wnd.jQuery("#theElement").animate({ top: "500px" }, 500, function() {
customPanel.@com.something.whatever.client.SomeCustomPanel::doSomething()();
});
// some other code here...
});
}-*/;
このコードは機能します。コンパイルされ、期待どおりに動作します。これを外部JavaScriptに移動したいと思います。以下を試してみました。私はこれを外部JavaScriptに入れました:
function attachClickAction(customPanel) {
$("#theElement").click(function() {
// other stuff...
$("#theElement").animate({ top: "500px" }, 500, function() {
customPanel.@com.something.whatever.client.SomeCustomPanel::doSomething()();
});
// other stuff...
});
}
そして、次のようにネイティブ関数を変更しました。
public native void attachClickHandler(SomeCustomPanel customPanel) /*-{
$wnd.attachClickAction(customPanel);
}-*/;
しかし、正しくありません。これは正しいJavaScriptではないため、JavaScriptファイルはロードされません。(Chomeの開発ツールから「UncaughtSyntaxError:Unexpectedidentifier」というエラーメッセージが表示されます。)
JSNIメソッドからではなく、外部JavaScriptファイルからJavaメソッドを呼び出す方法はありますか?
重要な場合は、GWT2.4を使用しています。