我不确定你是否有同样的不寻常的动机在 uibinder 标签下放置两个以上的根小部件。无论如何,这就是我的做法。
由于 uibinder 标签只允许一个根小部件,因此我放置了一个 HTML ui 标签作为根小部件,然后在该标签内堆积了多个伪根小部件。
在以下示例中,请注意实际的根小部件没有 ui:field 名称,因为我们不打算使用它。就我们而言,有效的根小部件是“tabLayout”和“content”。
文件 Hello.ui.xml:
<ui:UiBinder
xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<g:HTML>
<g:TabLayoutPanel ui:field="tabLayout" ... >
blah ... blah
</g:TabLayoutPanel>
<g:VerticalPanel ui:field="content">
blah .. blah
</g:VerticalPanel>
</g:HTML>
</ui:UiBinder>
不要将复合扩展为模板后面的 java 代码。创建由模块入口点导入的类或直接在模块上使用模板。
我有多种原因需要多个根小部件。在此示例中,我有条件地附加了“有效根小部件”:
public class Hello
implements EntryPoint{
private static HelloUiBinder uiBinder = GWT.create(HelloUiBinder.class);
interface HelloUiBinder
extends UiBinder<Widget, Hello>{}
@UiField TabLayoutPanel tabLayout;
@UiField VerticalPanel content;
@Override public void onModuleLoad() {
uiBinder.createAndBindUi(this);
if (condition1)
RootPanel.get().add(tabLayout);
else
RootPanel.get().add(content);
blah ... blah
}
}
所以,诀窍是根本不使用实际的根小部件。