2012-08-02 13 views
9

Gdybym określić mój CellTable w MyView.ui.xml UiBinder złożyć tak:Definiowanie GWT CellTables z UiBinder

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

a następnie programmaticaly dodać kolumny do CellTable, wszystko działa bez zarzutu.

Ale w celu zredukowania kodu standardowego, chciałbym zdefiniować również kolumny tabeli w moim pliku UiBinder. Próbowałem to:

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

Ale to daje następujący błąd:

[ERROR] [dialective] - Found unexpected child element Element addStyleNames='{style.titleColumn}'ui:field='titleColumn'> (:33)

Jak mogę zdefiniować cały CellTable korzystając UiBinder?

+1

Rozwiązałeś to za pomocą CellTable? –

Odpowiedz

5

Najwyraźniej w drugim wpisie próbujesz dodać kolumnę jako obiekt podrzędny. Tabela komórek nie akceptuje bezpośrednio dzieci (co oznacza, że ​​nie ma metody addChild (...)).

Jeśli masz stałą liczbę kolumn i chcesz korzystać z UIBinder, rozważ użycie tylko zwykłej tabeli HTML. W takim przypadku będziesz miał wszystkie kolumny w pliku XML, ale będzie trudniej pracować z tabelą - HtmlElement nie Widget.

<table ui:field="table"> 
    <col ui:field="firstColumn" class="{style.firstColumn}"> 
    <col ui:field="secondColumn" class="{style.secondColumn}"> 
    ... 
</table> 

I kod może wyglądać następująco

... 
@UiField 
private TableColElement firstColumn; 

@UiField 
private TableColElement secondColumn; 

ale wszystkie inne operacje na stole będzie poprzez DOM. Podobnie jak table.appentChild (rowElement). Myślę, że robienie tego nie jest tego warte.

Powiązane problemy