2012-07-11 179 views
0

概述如何將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

回答

0

你的代碼需要看起來像這樣:(只有一次牙套,因此不執行該功能...)

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

相關問題