मुझे कुछ अलग-अलग जीडब्ल्यूटी अनुप्रयोगों में एक ही समस्या का सामना करना पड़ा है जिसे मैंने रे रयान के दृष्टिकोण का उपयोग करके डिजाइन किया है। मेरा पसंदीदा समाधान सिंगलटन "सत्र ऑब्जेक्ट" बनाना है जो एप्लिकेशन के उस हिस्से की स्थिति को संग्रहीत करता है। अपने उदाहरण में, यह इस प्रकार दिखाई देंगे:
interface EditPersonSession {
void fetchPerson(PersonId id);
PersonDetails getCurrentPersonDetails();
void updatePersonDetail(PersonDetail<?> detail);
void updatePetDetail(PetDetail<?> detail);
void updateAddressDetail(AddressDetail<?> detail);
void save();
}
तीनों प्रस्तुतकर्ताओं सत्र वस्तु (शायद जिन द्वारा इंजेक्शन) के लिए एक संदर्भ होते हैं। जब भी यूआई (व्यू) उपयोगकर्ता द्वारा छेड़छाड़ की जाती है, तो उस दृश्य से जुड़े प्रस्तुतकर्ता तुरंत राज्य को साझा सत्र ऑब्जेक्ट पर धक्का देता है। उदाहरण के लिए, EditAddressPresenter अंदर:
view.getStreetNameTextBox().addValueChangeHandler(new ValueChangeHandler() {
void onValueChange(ValueChangeEvent<String> event) {
editPersonSession.updateAddressDetail(new StreetNameAddressDetail(event.getValue()));
}
}
जब यह बचाने के लिए समय आ गया है, राज्य वस्तु सर्वर से राज्य को बचाने के लिए कहा जाता है। इस बिंदु पर, सत्र ऑब्जेक्ट में डेटा के अद्यतित प्रतिनिधित्व होते हैं, और इसे एक साथ में सहेज सकते हैं। तो, EditPersonPresenter में:
view.getSaveButton().addClickHandler(new ClickHandler() {
void onClick(ClickEvent event) {
editPersonSession.save();
}
}
इस तरह, प्रस्तुतकर्ताओं एक दूसरे के लिए किसी भी संदर्भ होते हैं की जरूरत नहीं है, लेकिन सर्वर से लगातार जानकारी भेज सकते हैं। यदि प्रस्तुतकर्ताओं को यह पता होना चाहिए कि वे जो जानकारी प्रदर्शित करते हैं उन्हें अपडेट किया गया है (या तो अन्य प्रस्तुतकर्ताओं द्वारा, या सर्वर द्वारा), सत्र ऑब्जेक्ट ईवेंट ईवेंट (साझा सिंगलटन हैंडलर प्रबंधक) पर फायरिंग ईवेंट द्वारा उन्हें सूचित कर सकता है। प्रस्तुतकर्ता सत्र ऑब्जेक्ट से सबसे वर्तमान व्यक्ति विवरण खींच सकते हैं।
हम्म .. दिलचस्प समाधान। जो मैं पागल नहीं हूं वह यह तथ्य है कि मुझे उन सभी तत्वों के लिए मूल्य परिवर्तन हैंडलर पंजीकृत करने की आवश्यकता होगी जो मुझे संवाद का एक स्नैपशॉट प्रतिनिधित्व नहीं दे सकते हैं जैसे कि संपादन करते समय मुझे मूल्य प्राप्त करना था PersonSession.save() विधि कॉल । लेकिन मुझे लगता है कि यह करेगा। धन्यवाद! :) – Arthur
कोई समस्या नहीं :)। जब तक आप सुनिश्चित करते हैं कि आप प्रस्तुतकर्ताओं से मूल्यों को सत्र ऑब्जेक्ट में धक्का देते हैं जैसे ही विचारों में कोई भी मूल्य बदलता है, सत्र ऑब्जेक्ट को हमेशा कॉल में डेटा का अद्यतित प्रतिनिधित्व होना चाहिए जब आप कॉल करते हैं बचाना()। – Daniel