使用UiBinder定义GWT CellTable

时间:2012-08-02 10:16:42

标签: gwt uibinder celltable gwt-celltable

如果我在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?

1 个答案:

答案 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)。我觉得这样做不值得。