2012-04-13 7 views
5

क्या संपादक का संपादन करने वाली प्रॉक्सी प्राप्त करने का कोई तरीका है?जीडब्ल्यूटी संपादक फ्रेमवर्क

सामान्य कार्यप्रवाह होगा:

public class Class implments Editor<Proxy>{ 
    @Path("") 
    @UiField AntoherClass subeditor; 


    void someMethod(){ 
    Proxy proxy = request.create(Proxy.class); 
    driver.save(proxy); 
    driver.edit(proxy,request); 
} 
} 

अब अगर मैं एक ही प्रॉक्सी के उपसंपादक मिला

public class AntoherClass implements Editor<Proxy>{ 
    someMethod(){ 
    // method to get the editing proxy ? 
    } 
} 

हाँ मुझे पता है मैं सिर्फ setProxy साथ बाल संपादक करने के लिए प्रॉक्सी सेट कर सकते हैं () इसके निर्माण के बाद, लेकिन मैं जानना चाहता हूं कि HasRequestContext की तरह कुछ है लेकिन संपादित प्रॉक्सी के लिए।

यह उपयोगी जब आप उदाहरण के लिए गैर यूआई ऑब्जेक्ट्स में ListEditor का उपयोग करते हैं।

धन्यवाद।

उत्तर

7

दो तरीकों से आप उस ऑब्जेक्ट का संदर्भ प्राप्त कर सकते हैं जिस पर दिया गया संपादक काम कर रहा है। सबसे पहले, कुछ सरल डेटा और एक साधारण संपादक:

public class MyModel { 
    //sub properties... 

} 

public class MyModelEditor implements Editor<MyModel> { 
    // subproperty editors... 

} 

पहले: Editor को लागू करने के बजाय, हम एक और इंटरफ़ेस भी संपादक फैली हुई है, लेकिन अनुमति देता उप संपादकों चुन सकते हैं (LeafValueEditor उप संपादकों की अनुमति नहीं है)। कोशिश की सुविधा देता है ValueAwareEditor:

public class MyModelEditor2 implements ValueAwareEditor<MyModel> { 
    // subproperty editors... 

    // ValueAwareEditor methods: 
    public void setValue(MyModel value) { 
    // This will be called automatically with the current value when 
    // driver.edit is called. 
    } 
    public void flush() { 
    // If you were going to make any changes, do them here, this is called 
    // when the driver flushes. 
    } 
    public void onPropertyChange(String... paths) { 
    // Probably not needed in your case, but allows for some notification 
    // when subproperties are changed - mostly used by RequestFactory so far. 
    } 
    public void setDelegate(EditorDelegate<MyModel> delegate) { 
    // grants access to the delegate, so the property change events can 
    // be requested, among other things. Probably not needed either. 
    } 
} 

यह जरूरी है कि आप ऊपर के उदाहरण में के रूप में विभिन्न तरीकों को लागू करने, लेकिन मुख्य एक आप में रुचि रखते हैं setValue हो जाएगा। आपको इन्हें स्वयं इनकार करने की आवश्यकता नहीं है, उन्हें ड्राइवर और उसके प्रतिनिधियों द्वारा बुलाया जाएगा। flush विधि का उपयोग करने के लिए भी अच्छा है यदि आप ऑब्जेक्ट में बदलाव करने की योजना बना रहे हैं - फ्लश से पहले उन परिवर्तनों का अर्थ यह होगा कि आप ऑब्जेक्ट को अपेक्षित ड्राइवर लाइफसाइकिल के बाहर संशोधित कर रहे हैं - दुनिया के अंत में नहीं, लेकिन बाद में आपको आश्चर्य हो सकता है ।

दूसरा: एक SimpleEditor उप संपादक का उपयोग करें:

public class MyModelEditor2 implements ValueAwareEditor<MyModel> { 
    // subproperty editors... 

    // one extra sub-property: 
    @Path("")//bound to the MyModel itself 
    SimpleEditor self = SimpleEditor.of(); 

    //... 
} 

इस का उपयोग करना, तुम बाहर पढ़ने के लिए क्या वर्तमान मूल्य है self.getValue() कॉल कर सकते हैं।

संपादित करें: AnotherEditor आप को क्रियान्वित किया है को देखते हुए, यह लग रहा है आप GWT वर्ग SimpleEditor की तरह कुछ बनाने के लिए शुरू कर रहे हैं, जैसे ही आप अन्य उप संपादक के रूप में अच्छी तरह से देख सकते हैं:

अब अगर मैं एक ही प्रॉक्सी के उपसंपादक

public class AntoherClass implements Editor<Proxy>{ 
    someMethod(){ 
    // method to get the editing proxy ? 
    } 
} 

यह उपसंपादक Editor<Proxy> के बजाय ValueAwareEditor<Proxy> को लागू कर सकता है, और गारंटी दी जा मिला है कि इसके setValue मीटर संपादन शुरू होने पर प्रॉक्सी इंस्टेंस के साथ विधि कहा जाएगा।

+0

हां यह काम करता है, मुझे बस वैल्यूएवेयरएडिटर लागू करने की आवश्यकता है और सेटव्यू स्वचालित रूप से प्रॉक्सी सेट करता है। एपीआई से "संपादक जो संपादित किए गए मान के आधार पर बदलते हैं, इस इंटरफ़ेस को लागू करेंगे।" मेरा मामला है। =) –

+0

इस मदद के लिए धन्यवाद कॉलिन (espcially @Path ("") के लिए: मुझे @Path ("यह") करने का लुत्फ उठाना पड़ा लेकिन उसे विशेष ट्रेमेंट की आवश्यकता होगी ...) अब मैं चाहूंगा डेटा मान के आधार पर एक संपादक से दूसरे में स्विच करने का तरीका जानें। मेरे पास एक चुनिंदा बॉक्स है जो फ़ॉर्म को बदलना चाहिए (कई सामान्य फ़ील्ड लेकिन लेआउट और कुछ फ़ील्ड एपएयर/गायब हो जाते हैं)। मेरे पास प्रत्येक प्रकार के लिए यूआईबिंडर है, और मैं उपयोगकर्ता चयन पर एक से दूसरे में स्विच करना चाहता हूं। मुझे उन सभी को बनाने और उन्हें दृश्यमान बनाने की विचार पसंद नहीं है या स्थिति के आधार पर नहीं। मैं एक नया संपादक बनाना चाहता हूं और इसे श्रेय देना चाहता हूं –

0

This is the only solution I found। इससे पहले कि आप ड्राइवर संपादन को कॉल करें, संदर्भ संदर्भ को कॉल करना शामिल है। फिर आपके पास बाद में हेरफेर करने के लिए प्रॉक्सी है।

2

अपने बच्चे के संपादक वर्ग में, आप बस एक और इंटरफ़ेस लेक्सवैल्यू लागू कर सकते हैं, आप सेट वैल्यू विधि में संपादन प्रॉक्सी प्राप्त कर सकते हैं।

ValueAwareEditor भी काम करता है, लेकिन उन सभी अतिरिक्त विधियों में आपको वास्तव में आवश्यकता नहीं है।

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