2012-08-02 17 views
9

साथ डिफाइनिंग GWT CellTables अगर मैं परिभाषित MyView.ui.xml UiBinder में मेरी CellTable इस तरह दायर: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> 

और फिर programmaticaly CellTable में कॉलम जोड़ने, सब कुछ ठीक काम करता है।

लेकिन बॉयलरप्लेट कोड को कम करने के प्रयास में मैं अपनी यूआईबिंडर फ़ाइल में टेबल कॉलम को भी परिभाषित करना चाहता हूं। मैं इस की कोशिश की है:

... 
    <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] - Found unexpected child element Element addStyleNames='{style.titleColumn}'ui:field='titleColumn'> (:33)

मैं पूरी CellTable UiBinder का उपयोग कर कैसे परिभाषित कर सकता है?

+1

क्या आपने इसे सेलटेबल का उपयोग करके हल किया है? –

उत्तर

5

जाहिर है, दूसरी लिस्टिंग में आप एक बच्चे ऑब्जेक्ट के रूप में कॉलम जोड़ने की कोशिश कर रहे हैं। सेल टेबल सीधे बच्चों को स्वीकार नहीं करता है (जिसका मतलब है कि कोई addChild (...) विधि नहीं है)।

यदि आपके पास कॉलम की निश्चित संख्या है और केवल HTML तालिका का उपयोग करने पर विचार करने के लिए UIBinder का उपयोग करना चाहते हैं। उस स्थिति में आपके पास XML फ़ाइल में सभी कॉलम होंगे, लेकिन तालिका के साथ काम करने के लिए कठिन हो जाएगा - HTML नहीं विजेट नहीं।

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

लेकिन तालिका के साथ अन्य सभी कार्यों डोम के माध्यम से किया जाएगा की तरह लग रहे हो सकता है। Table.appentChild (rowElement) की तरह। मुझे लगता है कि ऐसा करने से यह लायक नहीं है।