Определение таблиц ячеек GWT с помощью UiBinder

Если я определяю свою CellTable в файле UiBinder MyView.ui.xml следующим образом:

<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>

а затем программно добавить столбцы в 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>

Но выдает следующую ошибку:

[ОШИБКА] [диалектива] - Обнаружен неожиданный дочерний элемент Element addStyleNames='{style.titleColumn}'ui:field='titleColumn'> (:33)

Как я могу определить всю CellTable с помощью UiBinder?


person Mike    schedule 02.08.2012    source источник
comment
Вы решили это с помощью CellTable?   -  person Muhammad Gelbana    schedule 15.10.2014


Ответы (1)


Очевидно, во втором листинге вы пытаетесь добавить столбец в качестве дочернего объекта. Таблица ячеек не принимает дочерние элементы напрямую (это означает отсутствие метода 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). Я думаю, что делать так не стоит.

person Vic    schedule 06.08.2012