2010-11-17 10 views
14

क्या एकGWT 2.1 UiBinder SimplePager स्थान विशेषता

<c:SimplePager ui:field='pager' location='HERE' /> 

मैं केन्द्र tryed के स्थान विशेषता के लिए प्रदान किया जा सकता की आवश्यकता है, लेकिन यह काम नहीं किया, मुझे लगता है कि वे न एक स्थान विशेषता खर्च नमूना एप्लिकेशन में देखना लेकिन इसके बजाय इसे UiBinder में इसके निर्माण पर स्थापित किया। लेकिन मैं इसे एक आवश्यक विशेषता के बाद से नहीं कर सकता। क्या करना है?

+0

मैं इसके साथ कोई समस्या नहीं है,

उत्तर

24

आप SimplePager.TextLocation है, जो केन्द्र, बाएं या दाएं हो सकता है प्रदान करनी चाहिए।

<c:SimplePager ui:field='pager' location='CENTER'/> 
+0

अगर मैं ऐसा करता हूं, और मैंने कोशिश की है कि मुझे एक और त्रुटि मिलती है, तो मुझे लगता है कि जब मैं अपने प्रोजेक्ट के साथ लैपटॉप तक पहुंच प्राप्त करता हूं तो यह वास्तव में क्या होता है। – rapadura

+0

यदि मैं स्थान विशेषता जोड़ता हूं तो मुझे यह त्रुटि मिली: [ERROR] कक्षा SimplePager के पास कोई उचित सेटस्थान() विधि तत्व नहीं है (: 12) – tbruyelle

+0

क्योंकि हो सकता है तत्वों के आदेश का। थोड़ा देर से प्रतिक्रिया लेकिन कुछ समय बचा सकता है। ui: क्षेत्र मुझे लगता है कि स्थान से पहले होना चाहिए। –

5

इस समय एकमात्र समाधान मैं देखता हूं @UiField(provided = true) के साथ काम कर रहा है। सुनिश्चित नहीं है कि यह किसी भी मदद की है लेकिन फिर भी नीचे दिए गए छोटे उदाहरण को देखें।

ui.xml:

<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> 
<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:style> 

    </ui:style> 
    <g:HTMLPanel> 
     <c:CellList ui:field="list" /> 
     <c:SimplePager ui:field="pager" /> 
     <g:Button ui:field="more" text="addMore" /> 
    </g:HTMLPanel> 
</ui:UiBinder> 

और विजेट:

public class TestView extends Composite { 

    private static TestViewUiBinder uiBinder = GWT.create(TestViewUiBinder.class); 

    interface TestViewUiBinder extends UiBinder<Widget, TestView> {} 

    @UiField(provided = true) 
    CellList<String> list; 
    @UiField(provided = true) 
    SimplePager pager; 
    @UiField 
    Button more; 
    private int counter = 0; 
    private ListDataProvider<String> provider; 

    public TestView() { 
     list = new CellList<String>(new TextCell()); 
     pager = new SimplePager(); 
     initWidget(uiBinder.createAndBindUi(this)); 
     provider = new ListDataProvider<String>(getList()); 
     provider.addDataDisplay(list); 
     pager.setDisplay(list); 
     pager.setPageSize(5); 
    } 

    private LinkedList<String> getList() { 
     LinkedList<String> list = new LinkedList<String>(); 
     list.add("1st"); 
     list.add("2nd"); 
     list.add("3rd"); 
     list.add("4th"); 
     list.add("5th"); 
     return list; 
    } 

    @UiHandler("more") 
    void onMoreClick(ClickEvent event) { 
     provider.getList().add(++counter + " more"); 
    } 
} 
+1

हाँ चलाता है, मैं इसे इस तरह भी किया था, जो एक सुरुचिपूर्ण समाधान नहीं है और अभी भी मेरा आईडीई (इंटेलिज) कहता है कि सरल पेजर पर एक आवश्यक फ़ील्ड है, लेकिन आश्चर्यजनक रूप से यह संकलित और बिना किसी समस्या के चलाता है। मुझे लगता है कि यह अजीब बात है कि आप पेजर = नया SimplePager() कर सकते हैं; <- कन्स्ट्रक्टर को कॉल नहीं करना जो टेक्स्टलोकेशन निर्दिष्ट करता है या इसे सेट करता है, फिर भी SimplePager UI टैग विफल रहता है। यह एक बग होना चाहिए, z00bs? – rapadura

1

SimplePager वर्ग, UiBinder द्वारा instantiated नहीं किया जा सकता है क्योंकि यह त्रुटि को ठीक करने के लिए एक स्थान सेटर नहीं है।

@UiField (प्रदत्त = सत्य) का एक विकल्प, जो चर को स्वचालित रूप से तत्काल चालू करने की अनुमति देता है, यूआईबिन्डर के बाहर पृष्ठ को निर्देशित करने के लिए एक फ़ैक्टरी विधि बनाकर तुरंत चालू करने के लिए और यदि आवश्यक हो तो ऑब्जेक्ट को सेटअप करें।

यहां फैक्टरी विधि का एक उदाहरण दिया गया है जो यह किसी भी @UiField SimplePager क्लास पर लागू होगा। @UiField (प्रदत्त = सत्य) कई अलग-अलग क्षणों को संभालेगा, लेकिन एक यूआईफ़ैक्टरी के लिए सबसे सरल है, क्योंकि जब आप चर का उपयोग किया जाता है तो आपको इससे चिंतित होने की आवश्यकता नहीं होती है।

@UiFactory SimplePager createSimplePager() { 
    return new SimplePager(TextLocation.CENTER); 
}