9

在与 Vaadin 玩了大约一周后,我很好奇 Vaadin 如何使用 GWT。GWT 将 Javacode 编译为 Javascript。每次重新部署时都必须这样做。

由于必须将 Vaadin 理解为以服务器为中心的框架,从而消除了编写在客户端执行的代码并将所有内容移至服务器(这听起来比实际情况更糟)的灵活性,GWT 编译器一次只运行一次。例如,当您从 vaadin 网站导入插件时会发生这种情况。

但这不可能那么容易吧?如果它只是将插件的代码编译为 javascript,那么以前可以这样做。

所以,我的问题是:

VAADIN 什么时候使用 GWT 编译器,除了编译到 js 之外,它还做了什么?

4

1 回答 1

14

基本上你是对的,而且大部分都是你自己回答的问题。

在 Vaadin 中,用户界面组件由两部分组成:

  1. 使用 JDK 编译的服务器端“组件”
  2. 使用 GWT 编译的客户端“小部件”

这些部分通过 HTTP 相互通信,并根据需要自动同步它们的状态。服务器端部分维护用户界面组件的状态,客户端小部件呈现该状态。

应用程序开发人员通常只使用服务器端组件来构建应用程序,他们并不真正需要关心客户端的工作方式。

一般来说,可以通过两种方式开发 Vaadin 的新组件:

  1. 组合现有组件
  2. 使用 GWT/JavaScript(+ 其他客户端技术)创建新的小部件

这里的第一种方法使用现有的类,不需要使用 GWT 重新编译小部件。仅编译应用程序代码(使用 JDK 编译器)。但是,在第二种情况下,客户端类发生了变化,需要重新编译。这是需要 GWT 编译器的时候。

由于 GWT 编译的 JavaScript 具有相当单一的性质(不管 GWT 的新代码拆分功能如何,命名空间都是全局的)Vaadin 使用小部件集的概念。那是一个 GWT 模块,其中包含应用程序所需的所有小部件。这意味着向应用程序添加新的(客户端)小部件需要重新编译 GWT。在删除小部件以优化小部件集大小时,重新编译小部件集也是一个很好的做法。

GWT 编译步骤本身并没有什么特别之处。但是,Vaadin 本身包含许多对小部件应用和使用的 GWT 类的添加、帮助程序和解决方法。

在使用 Vaadin 附加组件时,所有这些都非常明显(请参阅http://vaadin.com/directory)。即使附加组件也只是 jar 文件,如果它们包含新的客户端小部件代码,则在将它们添加到项目时需要使用 GWT 编译小部件集。

于 2011-08-19T18:57:27.750 回答