我正在尝试将我的大部分原生 JavaScript 代码从 JSNI 方法中移到脚本中,并且只是利用原生 JSNI 方法来调用这些外部方法。
现在,我的一个点击处理程序遇到了困难。当用户单击特定元素时,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 的开发工具给了我错误信息“Uncaught SyntaxError: Unexpected identifier”。)
有没有办法从外部 JavaScript 文件调用 Java 方法,而不是从 JSNI 方法?
如果重要的话,我在 GWT 2.4 中。