我正在创建自定义窗口小部件,其中包含复选框,名字,姓氏标签,我称其为PersonItem。
<g:HorizontalPanel verticalAlignment="middle">
<g:CheckBox ui:field="isSelected" />
<g:Label ui:field="firstName" text="placeholder" />
<g:Label ui:field="lastName" text="placeholder" />
</g:HorizontalPanel>
我想做的是创建另一个名为PersonList的小部件,
其中将所有PersonItem都包含为List<PersonItem>
PersonList视图将包含
@UiField
List<PersonItem> personItems;
但是不幸的是,我不知道如何为PersonList.ui.xml
文件中的这种字段制作uiBinder xml文件。甚至有可能吗?
除了在评论中提出的问题: 我想将PersonList用作标签
<p:PersonList ui:field="list" />
并且在加载主演示者时,PersonList将提供数据。
答案 0 :(得分:1)
按照@Marc Ströbel的建议,您可以使用CellList
来管理数据列表。作为将来的改进,您可以轻松地在此列表中添加例如寻呼机。
您可以为CellList
使用任何容器。您只需要覆盖单元格(AbstractCell
的render()
方法。
示例代码(作为我使用过VerticalPanel
的容器):
<!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">
<g:HTMLPanel>
<g:VerticalPanel ui:field="container" />
</g:HTMLPanel>
</ui:UiBinder>
public class PersonList extends Composite {
private static PersonListUiBinder uiBinder = GWT.create(PersonListUiBinder.class);
interface PersonListUiBinder extends UiBinder<Widget, PersonList> {}
@UiField
VerticalPanel container;
private CellList<PersonData> list;
public PersonList() {
initWidget(uiBinder.createAndBindUi(this));
list = new CellList<PersonData>(new AbstractCell<PersonData>() {
@Override
public void render(Context context, PersonData value, SafeHtmlBuilder sb) {
container.add(new PersonItem(value));
}
});
}
public void setData(List<PersonData> values) {
container.clear();
list.setRowData(values);
}
}
我假设人员数据(名字,姓氏等)存储在PersonData
类中。
现在,您可以根据需要使用PersonList
中的UiBinder
小部件:
<p:PersonList ui:field="list" />