我試圖將大部分原生JavaScript代碼從JSNI方法中移出並轉換爲腳本,並且只是利用本地JSNI方法來調用這些外部方法。GWT:可以從外部JavaScript代替JSNI調用Java方法嗎?
現在我遇到了一個點擊處理程序的問題。當用戶點擊某個元素時,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() {
[email protected]::doSomething()();
});
// some other code here...
});
}-*/;
此代碼的工作原理。它按預期進行編譯和工作。我想將其移入外部JavaScript中。我嘗試了以下。我把這個在外部JavaScript:
function attachClickAction(customPanel) {
$("#theElement").click(function() {
// other stuff...
$("#theElement").animate({ top: "500px" }, 500, function() {
[email protected]::doSomething()();
});
// other stuff...
});
}
而修改這樣的原生功能:
public native void attachClickHandler(SomeCustomPanel customPanel) /*-{
$wnd.attachClickAction(customPanel);
}-*/;
但不正確。 JavaScript文件甚至不會加載,因爲這是不正確的JavaScript。 (丁目的開發工具給我的錯誤消息「未捕獲的SyntaxError:意外的標識符」。)
有沒有辦法來調用外部JavaScript文件,不 Java方法從JSNI方法?
我在GWT 2.4中,如果它很重要。
注意:您應該使用'$ entry()'調用'customPanel ... doSomething()()'。 –
@avasopht - 爲什麼?我從來沒有見過這樣的構造。你可以解釋嗎? –
它圍繞某些try/catch語句進行調用,以避免GWT/javascript中的Java代碼異常將達到純JavaScript代碼空間。 –