2011-08-19 32 views
8

在與Vaadin玩了大約一週之後,我對Vaadin如何使用GWT感到好奇。 GWT將Javacode編譯爲Javascript。這必須在每次重新部署時完成。瞭解Vaadin如何使用GWT

由於Vaadin必須被理解爲一個以服務器爲中心的框架,消除了編寫在Clientside上執行的代碼並將所有代碼移動到服務器(這聽起來比實際情況更糟糕)的靈活性,GWT編譯器只運行一次一次。例如,當您從vaadin網站導入插件時會發生這種情況。

但它不可能那麼簡單嗎?如果它只能將插件的代碼編譯爲JavaScript,則可以在之前完成。

所以,我的問題是:

什麼時候VAADIN使用GWT編譯它有什麼比編譯成的js等這一點呢?

回答

14

基本上你是對的,並且主要是自己回答這個問題。

在Vaadin用戶界面組件由兩個部分組成:

  1. 服務器側「部件」使用JDK
  2. 客戶端「微件」編譯使用GWT

這些部分編譯通過HTTP相互通信並根據需要自動同步它們的狀態。服務器端部分維護用戶界面組件的狀態,並且客戶端小部件呈現該狀態。

應用程序開發人員通常只使用服務器端組件來構建應用程序,而他們並不需要關心客戶端的工作方式。

在一般情況下,新組件Vaadin可以從兩個方面展開:

  1. 組合現有的組件
  2. 創建一個新的widget與GWT/JavaScript的(+其他客戶端技術)

這裏的第一種方法使用現有的類,不需要使用GWT重新編譯小部件。只有應用程序代碼被編譯(使用JDK編譯器)。但是,在第二種情況下,客戶端類更改並需要重新編譯。這是需要GWT編譯器的時候。

由於GWT編譯的JavaScript相當單一的性質(無論GWT的新代碼分割功能的名稱空間是全局性的),Vaadin使用小部件集的概念。這是一個包含應用程序中所需的所有小部件的GWT模塊。這意味着需要爲應用程序添加新的(客戶端)小部件,以便進行GWT重新編譯。在移除小部件以優化小部件集大小時重新編譯小部件集也是一種很好的做法。

GWT編譯步驟本身沒什麼特別的。但是,Vaadin本身包含了很多附加,輔助和解決方法,以適用於小部件應用和使用的GWT類。

使用Vaadin加載項時,這一切都非常明顯(請參閱http://vaadin.com/directory)。即使插件也只是jar文件,如果它們包含新的客戶端小部件代碼,那麼當它們被添加到項目中時,需要使用GWT進行小部件集合編譯。