在GWT中布置元素的最佳方法是什么?

时间:2012-06-28 20:11:24

标签: java css gwt layout panels

在GWT小部件中指定元素位置的最佳做法是什么?

想象一下你有一个任务:在页面布局中放置一组小部件。您会用什么来按顺序放置所有按钮和输入?

  1. 标准HTML标记,包含表格/ divs +用于定位的CSS样式
  2. GWT小部件:面板,网格,表格+用于定位的CSS样式
  3. GWT小部件:面板,网格,表格+用于定位的原生属性
  4. 如果是2或3 - 您将使用什么来重现带有colspans,固定宽度列和填充的标准HTML表?

    PS UIBinder和XML标记。 GWT 2.4


    我的观点: GWT的一大优势是能够阻止程序员编写HTML标记并为界面添加跨浏览器支持。我们不应该放弃这些点,以便更好地选择p.3并尝试仅使用CSS进行装饰 - 即颜色,字体等。

    另一种观点: 将内嵌任何样式放置是一个坏主意。通过在XML标记中指定小部件的属性,我们确实正是这样做的。 此外,GWT没有足够的小部件来生成正常的布局。例如,您需要创建一个包含collspans和固定列宽的简单表。你会怎么做?看起来你必须在VerticalPanels中嵌入几个Horizo​​ntalPanels,在每个人中指定宽度/高度,并由此产生一篇很好的XML论文。


    那你的意见是什么?

1 个答案:

答案 0 :(得分:7)

GWT会产生可怕的,可怕的,不好的,非常糟糕的HTML。这只是我的意见,其他人则不同意。但我每天都在使用GWT,无限嵌套的div和表足以让新手网络开发人员哭泣。并且它的所有样式都是内联的,因此如果您想使用外部样式表应用或覆盖这些样式,最终会得到!important声明的林。

然而,它确实产生了非常可爱的JavaScript。作为曾经不得不维护和开发一个极其复杂的DHTML项目并为IE 5.5及以上提供支持的人 - 手工 - 我不得不承认,这是GWT的最佳部分。

不可否认,我是一名DHTML纯粹主义者,在我成为软件开发人员之前很久就成为了一名网络开发者。我个人认为HTML应该仅用于结构,CSS应该提供样式,JavaScript应该提供其他功能,并且这三者应该完全分开。 GWT在最后一部分是相当不错的 - JavaScript - 但它生成的HTML冒犯了我的敏感性,并且至少比它的复杂性高十倍。但话说回来,大多数生成的代码都是。 (考虑使用MS Word创建的网站或从WYSIWYG风格的编辑器生成的HTML。)

鉴于一个复杂的基于Web的应用程序 - 以及对滚动Ruby on Rails应用程序的限制 - 我很乐意使用GWT。但我的应用程序几乎是FlowPanel s(编译为HTML <div>)和GWT生成的Javascript的集合,我自己的CSS在顶部。因此,在OP规定的情况下,我将使用FlowPanel,添加元素(例如GWT表单元素),应用任何服务器端逻辑,然后使用外部CSS进行样式化。

在查看GWT时,您可能想要考虑以后是否希望重新设计应用程序,或者希望让设计人员或其他非程序员创建模板/样式/ CSS以应用于顶部。如果是这样的话,当你设计你的GWT应用程序不应用样式而不是应用类和id时,你会非常小心。

另外作为测试方面的注意事项:如果您计划使用Selenium进行UI测试,那么 生成的HTML中的xpath实际上是不合适的,并且可以长达数百个字符。

话虽如此,我对听到其他人的经历非常感兴趣,特别是如果他们与我的不同。

tl; dr版本:

  1. GWT生成的HTML非常糟糕,嵌套表和嵌套<div>的多层(超过必要)
  2. GWT不会生成CSS样式表,但会将所有样式内联。这使得使用外部样式表变得乏味且困难。
  3. GWT在跨浏览器Javascript方面表现出色。
  4. 默认情况下,GWT不会将id附加到元素上,因此如果您打算使用像Selenium这样的工具,则必须手动添加自己的ID,或者像您以前从未见过的那样使用非常长的xpath。