2011-08-25 17 views
0

我試圖尋找一個類似的帖子,但找不到任何,因此張貼此查詢爲您的幫助。實質上,我有一個在GWT端創建的自定義UI。現在,我想將發生在GWT端的事件發送到javascript/jsp頁面。爲此,我想知道是否有方法讓jsp/javascript在GWT代碼中註冊一個方法,並且在GWT端發生任何事件時,GWT java代碼可以簡單地調用此javascript方法(這就像一個函數指針/對象),並在jsp頁面通知信息。儘管我可以直接從GWT代碼中調用JavaScript方法,但是,這意味着GWT代碼也需要知道JavaScript方法名稱,並且這會導致緊密耦合。相反,javascript可以簡單地將函數的句柄傳遞給GWT代碼,該代碼將簡單地調用此句柄以傳遞jsp/javascript代碼中的必要事件。任何想法都會非常有幫助。在GWT java代碼中註冊一個javascript方法,以便它可以基於GWT中的事件調用

回答

0

您可以使用Dictionary將函數名稱傳遞給您的應用程序。

在JSP主頁:

<script type="text/javascript"> 
    function myFunction() { 
    // Do stuff... 
    } 

    var MyDictionary = { 
    myCallback = "myFunction" 
    }; 
</script> 

而在你的應用程序:

public void onEvent(EventType event) { 
    Dictionary d = Dictionary.getDictionary("MyDictionary"); 
    invokeNativeCallback(d.get("myCallback")); 
} 

private native void invokeNativeCallback(String callbackName) /*-{ 
    if (typeof $wnd[callbackName] === "function") { 
    $wnd[callbackName](); 
    } 
}-*/; 
+0

非常感謝,賈森。這看起來像我正在尋找的方法,但我想知道有沒有辦法將Dictionary對象傳遞給GWT代碼?我的意思是註冊myDictionary變量,就像你在jsp頁面中提到的那樣,我們需要通過GWT端暴露的另一個JSNI方法註冊它。我知道我們可以將原始數據類型從JavaScript傳遞到GWT,但是爲了傳遞Dictionary對象,是否有特殊符號?非常感謝您的回覆。 – ash1977

+0

'Dictionary'是從GWT到包含字符串值的全局JavaScript對象的橋樑。您不需要JSNI方法來獲取字典,只需要變量的名稱即可。沒有辦法直接通過頂層'onModuleLoad()'傳遞參數。 –

+0

哦,所以你提到我可以在任何本地方法中直接從GWT代碼中訪問全局myDictionary變量,然後像上面提到的那樣使用它,或者你上面提到的代碼可以沒有任何修改就可以直接使用?再次感謝您在這裏的幫助。 – ash1977

相關問題