如何将GWT方法作为参数传递给Javascript函数?

问题描述:

概述如何将GWT方法作为参数传递给Javascript函数?

  • 有一个GWT方法叫做:private void handleError()
  • 有一个JSNI JavaScript函数调用:private native void registerErrorHandler()
  • javascript函数从第三方Javascript库调用另一个函数的本机:foo.attachEvent("EventName", handlerReference);

功能

我需要通过GWT方法作为函数参数到foo.attachEvent()功能,我尝试几种方法:

foo.attachEvent("Error", registerErrorHandler); - > TypeMismatchException

foo.attachEvent("Error", [email protected]::registerErrorHandler()); - > TypeMismatchException

var handler = [email protected]::registerErrorHandler()(); 
foo.attachEvent("Error", handler); 

- > TypeMismatchException

普通的JavaScript

当我写这篇文章在普通的JavaScript,它的工作:

function handleError() { 
    alert("Error"); 
} 
function registerErrorHandler() { 
    var event = "Error"; 
    var handler = handleError; 

    foo.attachEvent (event, handler); 
} 

如何我实现了到GWT?我有很多问题完全理解Javascript - Java对象转换。我将handleError函数引用理解为JavaScriptObject,但我无法使用该信息处理它。

+0

GWT必须在RootLayoutPanel内执行 - 这是一个完整的页面。您不能将Javascript与GWT生成的函数混合使用。 GWT的目的不在于此。 – sreehari 2012-07-11 07:58:52

你的代码需要看起来像这样:(只有一次牙套,因此不执行该功能...)

var handler = [email protected]::registerErrorHandler(); 
foo.attachEvent("Error", handler); 

但你也想要做的是包装您的功能在$输入功能,使您的未捕获异常处理程序将工作:

var handler = [email protected]::registerErrorHandler(); 
foo.attachEvent("Error", $entry(handler)); 

什么你总是可以做的是建立一个直接调用你的GWT功能的js函数:

var that = this; 
var handler = function(){ 
    [email protected]::registerErrorHandler()(); 
}; 
foo.attachEvent("Error", $entry(handler)); 
+0

感谢您的洞察力。你的第一个exampled立即工作。然而,第三方库没有以某种方式附加事件,但是当我像第三个示例中那样定义一个新函数并在那里提供一个具体的实现时(例如'$ wnd.alert(“handled!”);')它正在工作。如果我使用特殊语法传递一个GWT函数,那么它不起作用,并且在gwt代码('__gwt_tearOffGenerators')的某个地方引发异常。你也有这个想法吗? – 2012-07-11 09:10:07

+0

啊,现在我明白''那东西了。它正在工作。再次感谢。 – 2012-07-11 09:41:36

+0

这里面的功能和外面的功能不一样... – 2012-07-11 10:22:43