簡體   English   中英

如何將GWT方法作為參數傳遞給Javascript函數?

[英]How to pass a GWT method as a parameter into a Javascript function?

總覽

  • 有一個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", 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 ,但無法使其與該信息一起使用。

您的代碼需要看起來像這樣:(只有一次大括號,因此該函數未執行...)

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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM