2012-08-22 51 views
0

我是GWT新手,很难理解模块ClientBundle之间的根本区别。在GWT文档的某些区域中,这两者看起来都是一回事,而在其他地区,显然它们并不相同。GWT:模块与ClientBundle?

我的理解是,模块是部署到用户浏览器的客户端代码。这是一个包含HTML,CSS和JS的ZIP文件。

我的理解是,一个ClientBundle类似于一个模块,但它只包含静态资源,如图像。

如果这些理解是正确的,那么为什么需要区分两者?不是HTML/CSS/JS静态资源吗?!?如果我远离基地,请帮我了解它们之间的区别,并且可能会提供每个区域的具体示例,以及适合每种区域的具体示例。提前致谢!

回答

3

您对模块有了正确的想法 - 它描述了(在开发方面)要使用的java源路径,启动编译的入口点以及各种属性(浏览器,语言环境)编译时使用。编译完成后,模块也代表输出 - javascript和任何相关的其他编译文件,无论是日志,图像,样式表等。

相反,ClientBundle是开发人员可以告诉编译器的方式之一编译后将使用java源路径中的某些资源。 CssResource附带了使用css样式名称的额外检查(如果不是,应该删除它们以最大限度地减少编译输出),ImageResource确保文件在编译时存在,并且为每个浏览器都以最佳优化方式输出这些文件。大多数浏览器的图像实际上都包含在大量的JS文件中,以最大限度地减少对服务器的调用次数,对于那些不支持此功能的用户,它们会自动精确地显示在一起。

通过声明ClientBundle接口并调用GWT.create(MyClientBundle.class),您要求编译器处理ClientBundle的具体细节,以便在您的应用程序中使用这些引用的文件和类。 如何它不具有与GWT发电机,一个更高级的话题比可以在解决SO回答做...

是,ClientBundles 描述由正在运行的应用程序所需的静态资源,是的,编译模块由各种静态资源的组成,但我会以这种方式重新理解您的理解:ClientBundle是静态内容可以包含在GWT模块中以这种方式加载的方式之一尽可能高效。

+0

感谢@Colin Alworth提供了一个非常棒的答案(+1) - 但是我仍然不会*很*在这里看到“树林通过森林”......可能会坚持使用“CssResource”或“ImageResource”你能否给我看一个目录结构,包括同一个项目中的一个模块和其中一个ClientBundles的目录结构,并将它们与最终的输出相关联,并将它们发送回客户端浏览器?再次感谢! – IAmYourFaja

+0

结构非常简单 - 声明CssResource子接口,然后在一组图像和css文件的同一个包中创建一个ClientBundle类型,并使用@Source注释将ClientBundle方法映射到文件。输出比较困难,因为特别是对于浏览器而异的图像,CSS总是会被烧入最终编译的JS本身,并且只在需要时才被注入。我喜欢https://developers.google.com/web-toolkit/doc/latest/DevGuideClientBundle作为讨论如何使用它以及一些示例 - 如果不够清楚,我会修改答案。 –