使用UiBinder时,创建这样的简单布局的首选方法是什么?
FlowPanel:
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'>
<ui:style>
.outer {
display: table;
height: 100%;
width: 100%;
}
.inner {
background: #DDD;
display: table-cell;
vertical-align: middle;
}
</ui:style>
<g:FlowPanel styleName="{style.outer}">
<g:FlowPanel styleName="{style.inner}">
<g:Label ui:field="someLabel"/>
</g:FlowPanel>
</g:FlowPanel>
</ui:UiBinder>
HTMLPanel:
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'>
<ui:style>
.outer {
display: table;
height: 100%;
width: 100%;
}
.inner {
background: #DDD;
display: table-cell;
vertical-align: middle;
}
</ui:style>
<g:HTMLPanel styleName="{style.outer}">
<div class="{style.inner}">
<g:Label ui:field="someLabel"/>
</div>
</g:HTMLPanel>
</ui:UiBinder>
编辑:我知道他们在渲染时会生成相同的html,我想知道是否有任何理由使用一种风格而不是另一种风格。
javadocs说FlowPanel是最简单的面板,但在什么时候使用HTMLPanel变得更好。 e.g。
<FlowPanel>
<FlowPanel>
<Widget>
</FlowPanel>
<FlowPanel>
<Widget>
</FlowPanel>
</FlowPanel>
VS
<HTMLPanel>
<div>
<Widget>
</div>
<div>
<Widget>
</div>
</HTMLPanel>
感谢。
UiBinder - HTMLPanel vs. div是一个非常相似的问题,但询问使用div与HTMLPanel。
答案 0 :(得分:10)
实际上他们会在你的情况下渲染相同的 - div。除非您开始向FlowPanel添加更多元素,否则没有区别。
您可以在此处尝试FlowPanel行为: http://examples.roughian.com/index.htm#Panels~FlowPanel
如果您需要在页面上编写自己的自定义HTML代码,则应使用HTMLPanel。它允许在HTMLPanel标签内编写HTML代码。
例如,您无法使用FlowPanel执行此类操作。
答案 1 :(得分:4)
我最近阅读了Tags First GWT Programming。在我看来,他描述的技术可以让你更好地控制页面的最终渲染,同时保持GWT的优势。
我认为你在FlowPanel和HTMLPanel之间提出的二分法并不是真正正确的问题。相反,最好认识到它们意味着不同的东西。
HTMLPanel能够比FlowPanel更多。当您需要动态添加和删除嵌入在某些自定义html中的小部件时,请使用HTMLPanel。如果你只是想让一些小部件在页面上与普通的html流对齐(比如一些文本和图片),请使用FlowPanel。
我个人的建议是使用最简单的东西来做你需要的东西。
答案 2 :(得分:0)
我推荐第二个例子。如果可能,您应该更喜欢在诸如“FlowPanel”之类的小部件上使用简单的HTML标记,例如“div”,因为有一个未使用的逻辑小部件的开销。
这可能看起来微不足道,但是当你需要处理很多物品时,它会为你省去很多麻烦(内存泄漏,gquery操作......)。