2012-10-21 8 views
6

मैं अपने पहले जीडब्ल्यूटी ऐप की तैयारी में जीडब्ल्यूटी पर पढ़ रहा हूं, और LazyDomElement पर ठोकर खा रहा हूं और इसे दिलचस्प लग रहा हूं।जीडब्ल्यूटी: LazyDomElement का उपयोग कब करें?

यह मेरी समझने है कि आप वास्तव में अपने खुद के विजेट उपवर्ग (और नहीं बस का विस्तार Composite) बनाने के लिए चाहते हैं, कि आप डोम के साथ कि विजेट इंटरफ़ेस के लिए अतिरिक्त काम के सभी प्रकार की ज़रूरत है।

तो मैं पूछता हूं: आपको "अतिरिक्त काम" क्या करना है - जो आपको (अनिवार्य रूप से) Composite उप-वर्ग से मुक्त करने के लिए मिलता है - और यह आसान बनाने या प्रदर्शन को बढ़ाने के लिए LazyDomElement का उपयोग कैसे कर सकता है?

उत्तर

3
GWT दस्तावेज और स्रोत कोड से

ऐसा लगता है कि इस वर्ग के केवल बारे में UiBinder कार्यक्षमता है और आधार GWT विजेट में से कोई भी इस वर्ग का उपयोग करें। मुख्य और एकमात्र विशेषता LazyDomElement आपके विजेट के फ़ील्ड में स्थगित पहुंच है।

<gwt:HTMLPanel> 
    <div ui:field="lazyField" /> 
    <div ui:field="generalField" /> 
    <!-- Other fields --> 
</gwt:HTMLPanel> 

और इसके लिए जावा वर्ग: मान लीजिए कि आप टेम्पलेट के साथ एक विजेट करते

public class MyCoolWidget extends UIObject { 
  interface MyUiBinder extends UiBinder<DivElement, MyCoolWidget> {} 
  private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); 

  @UiField LazyDomElement<DivElement> lazyField; 

    @UiField DivElement generalField; 

    // all other fields … 

  public MyCoolWidget() { 
    // Initializes all your fields and also calls 'getElementById' for all 
    // not lazy fields of your widgets to have a reference to them. 
    // There could be hundreds of them if you are building really cool app, 
    // and also they could be hidden (e.g. other tab on UI) and not required 
    // to be accessed at all for some cases. 
    setElement(uiBinder.createAndBindUi(this)); 
  } 

  public void setLazyField(String value) { 
    // Finally we need to modify the field, ok, 
    // we access the DOM only at this moment 
    // (please take a look at 'get()' method implementation for details) 
    lazyField.get().setInnerText(name); 
    } 

    public void setGeneralField(String value) { 
    // Reference to element is already there, we are just going 
    // to change it's property 
    generalField.setInnerText(name); 
    } 
} 

इसलिए, यह का उपयोग करने का कारण केवल अपने अनुप्रयोग के विशेष मामले पर निर्भर करता है, आप की जरूरत है अपने विजेट तत्वों की आलसी लोडिंग या नहीं।

यूपीडी। यह उल्लेख करना किराया है कि मैंने इस वर्ग का वास्तविक परियोजनाओं में अभी तक उपयोग नहीं किया है :)। मैं बस कुछ परिदृश्य कल्पना कर सकते हैं। उदाहरण के लिए आपको टिकट आरक्षण पैनल बनाना होगा।

  • प्रत्येक यात्री के लिए इनपुट फॉर्म एन करने के लिए यात्रियों के लिए टिकट आरक्षण का समर्थन करना चाहिए बराबर और बहुत भारी (अमीर एचटीएमएल, इनपुट फ़ील्ड का एक बहुत)

हैं: एक निम्नलिखित प्रारंभिक आवश्यकताओं के साथ इसलिए, आपको पृष्ठ लोड होने से पहले अपने फ़ील्ड तक पहुंचने की आवश्यकता के बिना, एक बार में 10 बराबर समृद्ध रूपों को प्रस्तुत करने की आवश्यकता है। हम ReservationForm विजेट (ReservationForm.ui.xml मार्कअप के साथ, और ReservationForm.java कुछ तर्क के लिए) बना सकते हैं और हमारे पहले लोडिंग समय को बचाने के लिए इनपुट फ़ील्ड के लिए LazyDomElement का उपयोग कर सकते हैं।

+0

वाह - महान उत्तर, धन्यवाद @ mudalov (+1)! बक्षीस के लिए एक त्वरित अनुवर्ती अनुवर्ती: क्या आप कृपया कुछ जवाब केस परिदृश्य शामिल करने के लिए अपना उत्तर अपडेट कर सकते हैं जब किसी को विजेट तत्वों की आलसी लोडिंग की आवश्यकता होगी? मैं जीडब्ल्यूटी के लिए नया ब्रांड हूं और यहां पेड़ के माध्यम से जंगल को देखकर कठिन समय है। एक बार फिर धन्यवाद! – IAmYourFaja

+0

@ 4herpsand7derpsago, मैंने एक साधारण मामला जोड़ा है। – udalmik

संबंधित मुद्दे