0

概述

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

功能性

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

foo.attachEvent("Error", registerErrorHandler);-> 类型不匹配异常

foo.attachEvent("Error", this.@package.foo::registerErrorHandler());-> 类型不匹配异常

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

-> 类型不匹配异常

纯Javascript

当我用纯 Javascript 编写它时,它正在工作:

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

    foo.attachEvent (event, handler);
}

我怎样才能将它实现到 GWT 中?我在完全理解 Javascript - Java Objects 转换时遇到了很多问题。我将handleError函数引用理解为JavaScriptObject,但我无法使用该信息使其工作。

4

1 回答 1

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));
于 2012-07-11T07:54:57.830 回答