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

时间:2012-07-11 07:49:54

标签: java javascript gwt jsni

概述

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

功能

我需要将GWT方法作为函数参数传递给foo.attachEvent()函数,我尝试了几种方法:

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

foo.attachEvent("Error", this.@package.foo::registerErrorHandler()); - > TypeMismatchException

var handler = this.@package.foo::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 Objects转换方面遇到了很多问题。我将handleError函数引用理解为JavaScriptObject,但我无法使用该信息。

1 个答案:

答案 0 :(得分:0)

你的代码需要看起来像这样:(只有一次大括号,因此函数没有被执行......)

var handler = this.@package.foo::registerErrorHandler();
foo.attachEvent("Error", handler);

但你还想做的是将你的函数包装在$ entry函数中,这样你的未被捕获的异常处理程序就可以了:

var handler = this.@package.foo::registerErrorHandler();
foo.attachEvent("Error", $entry(handler));

你总是可以做的是建立一个直接调用gwt函数的js函数:

var that = this;
var handler = function(){
    that.@package.foo::registerErrorHandler()();
};
foo.attachEvent("Error", $entry(handler));