如果我在MyView.ui.xml UiBinder文件中定义我的CellTable,如下所示:
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
xmlns:c="urn:import:com.google.gwt.user.cellview.client"
ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateKeys='com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator'
ui:generateLocales='default' xmlns:p1="urn:import:com.google.gwt.user.cellview.client">
...
<g:HTMLPanel>
<c:CellTable
addStyleNames='{style.cellTable}'
pageSize='15'
ui:field='cellTable' width="100%">
</c:CellTable>
</g:HTMLPanel>
然后programmaticaly将列添加到CellTable,一切正常。
但是为了减少样板代码,我想在我的UiBinder文件中定义表列。我试过这个:
...
<g:HTMLPanel>
<c:CellTable
addStyleNames='{style.cellTable}'
pageSize='15'
ui:field='cellTable' width="100%">
<c:TextColumn
addStyleNames='{style.titleColumn}'
ui:field="titleColumn"/>
</c:CellTable>
</g:HTMLPanel>
但它会产生以下错误:
[ERROR] [dialective] - 找到意外的子元素Element addStyleNames ='{style.titleColumn}'ui:field ='titleColumn'&gt; (33)
如何使用UiBinder定义整个CellTable?
答案 0 :(得分:5)
显然,在第二个列表中,您尝试将列添加为子对象。单元格表不直接接受子项(意味着没有addChild(...)方法)。
如果您有固定数量的列并想要使用UIBinder,请考虑使用纯HTML表。在这种情况下,您将拥有XML文件中的所有列,但该表将变得更难以使用 - HtmlElement而不是Widget。
<table ui:field="table">
<col ui:field="firstColumn" class="{style.firstColumn}">
<col ui:field="secondColumn" class="{style.secondColumn}">
...
</table>
代码可能如下所示
...
@UiField
private TableColElement firstColumn;
@UiField
private TableColElement secondColumn;
但是表的所有其他操作都将通过DOM进行。像table.appentChild(rowElement)。我觉得这样做不值得。