UiBinder用于以声明方式布局GWT组件,使用XML标记,而不是以编程方式使用Java代码。
UiBinder树中的新XML元素意味着应该创建该类的新实例。因此,GWT docs中的这个例子实例化了一个新的HorizontalPanel和两个Labels:
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'>
<g:HorizontalPanel>
<g:Label>Keep your ducks</g:Label>
<g:Label>in a row</g:Label>
</g:HorizontalPanel>
</ui:UiBinder>
还有另一个例子,有一个DockLayoutPanel:
<g:DockLayoutPanel unit='EM'>
<g:north size='5'>
<g:Label>Top</g:Label>
</g:north>
<g:center>
<g:Label>Body</g:Label>
</g:center>
<g:west size='10'>
<g:HTML>
<ul>
<li>Sidebar</li>
<li>Sidebar</li>
<li>Sidebar</li>
</ul>
</g:HTML>
</g:west>
</g:DockLayoutPanel>
在这种情况下,元素是&#39; north&#39; west&#39;&#39; center&#39;,但这些不是类的新实例,而是一个配置新的DockLayoutPanel。
答案 0 :(得分:1)
似乎您必须为自定义小部件引入自定义UiBinder解析器。
com.google.gwt.uibinder.elementparsers.DockLayoutPanelParser
类定义了以下静态最终地图:
private static final Map<String, String> DOCK_NAMES = new HashMap<String, String>();
static {
DOCK_NAMES.put("north", "addNorth");
DOCK_NAMES.put("south", "addSouth");
DOCK_NAMES.put("east", "addEast");
DOCK_NAMES.put("west", "addWest");
DOCK_NAMES.put("lineStart", "addLineStart");
DOCK_NAMES.put("lineEnd", "addLineEnd");
DOCK_NAMES.put("center", "add");
}
没有搜索所有这些,但我猜测任何具有自定义解析器的小部件(如DockLayoutPanel)都可以处理您为其编程处理的内部XML元素。