2010-11-23 10 views
5

मैं कुछ साधारण ग्राफिंग सॉफ़्टवेयर विकसित करने पर काम कर रहा हूं जिसे स्विंग और gwt दोनों में लागू करने की आवश्यकता है। Gwt पक्ष पर, मैं कैनवास के लिए gwt-g2d का उपयोग करने जा रहा हूँ। मैं कुछ सॉफ्टवेयर को सरल बनाने के लिए दोनों कार्यान्वयनों में एक इवेंटबस का उपयोग करने की उम्मीद कर रहा था।आप जीडब्ल्यूटी के सरल इवेंटबस या इवेंटबस का उपयोग कैसे करते हैं?

  1. का दृष्टांत EventBus
  2. का दृष्टांत जनक विजेट, (, माउसओवर या RPC कॉलबैक उदाहरण के लिए) की घटनाओं आप EventBus के लिए चाहते हैं सिंक
  3. :

    मेरे समझ है कि यह कुछ इस तरह होना चाहिए अभिभावक विजेट से घटनाओं को सुनने के लिए EventBus सेट करें।

  4. का दृष्टांत बच्चे विजेट, जो EventBus साथ श्रोताओं यह है पंजीकरण करना होगा (वे घटनाओं वे सक्रिय हो सकता है रजिस्टर करने के लिए की जरूरत है?)
  5. जब EventBus एक घटना प्राप्त करता है, यह घटना के बारे में एक निर्णय करते हैं और उसके बाद कार्य करना चाहिए उस निर्णय पर, इसका मतलब है कि इसे अनदेखा करना, ईवेंट प्रकार बदलना, या बस इसे लागू सभी लागू करने वाले बच्चों के विजेट में रिले करना।

क्या यह आम तौर पर काम करना चाहिए? SimpleEventBus अभी भी नया है, और मुझे वेब पर बहुत कुछ नहीं मिल रहा है इसके बारे में वास्तव में इसका उपयोग कैसे करें।

उत्तर

2

एक SimpleEventBus हैंडलर के संग्रह को संग्रहीत करने की बहुत ही बुनियादी कार्यक्षमता प्रदान करता है, और उपयुक्त होने पर सभी प्रासंगिक हैंडलर के साथ event.dispatch() को कॉल करता है। मैं यह नहीं कहूंगा कि आप पैरेंट विजेट से "ईवेंट सुनने के लिए EventBus सेट करें"। SimpleEventBus में "पैरेंट" की अवधारणा नहीं है। इसके बजाय, आप अपने SimpleEventBus के संदर्भ में पास करते हैं। फिर, कोई ऑब्जेक्ट SimpleEventBus.fireEvent विधि के साथ "ईवेंट को आग" कर सकता है। कोई पदानुक्रम नहीं है।

इसी तरह, कोई ऑब्जेक्ट SimpleEventBus.addHandler() के साथ उन घटनाओं के लिए सुन सकता है। यह आपके # 4 - एडहैंडलर के निकटतम है ईवेंट और एक हैंडलर लेता है, इसलिए जब भी उस प्रकार की घटना fireEvent (आपके ऐप में कुछ करके) हो जाती है, तो उस हैंडलर को ईवेंट में पास कर दिया जाएगा। ध्यान दें कि Event हैडलर को कॉल करता है, इवेंटबस नहीं! इवेंटबस सिर्फ event.dispatch (हैंडलर) को कॉल करता है, और ईवेंट का प्रोग्रामर हैडलर में उचित फ़ंक्शन को कॉल करने के लिए ज़िम्मेदार है। आपका # 5 गलत है, कम से कम एक SimpleEventBus के लिए - SimpleEventBus घटनाओं का निरीक्षण नहीं करता है, यह देखने के अलावा कि कौन से हैंडलर कॉल करें। यह किसी भी बच्चे विजेट या किसी भी ऐप तर्क के बारे में नहीं जानता है, और कभी भी किसी ईवेंट के प्रकार को नहीं बदलता है।

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

दूसरी ओर, "आकार बदलें" ईवेंट की तरह कुछ बहुत समझ में आता है, क्योंकि आपके सभी विजेट को इसके बारे में जानने की आवश्यकता हो सकती है।

0

जहां तक ​​मैं जीडब्ल्यूटी इवेंटबस को समझता हूं, यह उन घटनाओं के लिए है जो आवेदन व्यापक हैं (सोचें "सिस्टमवाइड ऑब्जेक्ट एक्स चंडेड प्रॉपर्टी वाई"; जो कुछ भी उस विशेष घटना को सुनता है उस पर कार्य कर सकता है)। यह आपको अपने एप्लिकेशन तर्क को अलग करने में मदद करता है।

शायद आप इसमें किसी भी यूआई घटनाओं को आग नहीं करना चाहते हैं: आपके माता-पिता विजेट हैंडलर को कार्यान्वित कर सकते हैं या आप केवल अज्ञात उदाहरणों का उपयोग कर सकते हैं।

+0

मैंने सोचा कि इसका आकर्षण का हिस्सा यह था कि यह यूआई इवेंट इंजेक्शन का उपयोग करके स्वचालित परीक्षण मामलों के लिए आसान बना दिया। वैसे भी, कारण मैं ऐसा करने की कोशिश कर रहा था क्योंकि एक कैनवास में 4 ग्राफ क्षेत्र हो सकते हैं, और उन क्षेत्रों में एक-दूसरे पर 4 ग्राफ़ ऑब्जेक्ट हो सकते हैं। यदि मैं ग्राफ़ ऑब्जेक्ट पर क्लिक करता हूं, तो मुझे यह देखने के लिए कुछ तर्कों को चलाने की ज़रूरत है कि कौन सा चुना गया था, क्योंकि एक बिंदु ओवरलैप हो सकता है। मेरी कस्टम घटनाएं आकार बदलने, नए डेटा, नए डेटाविंडो, नए पैमाने, आदि जैसी चीजें होने जा रही थीं ... – Brian

+0

मैं जीडब्ल्यूटी देवताओं द्वारा सुझाए गए एमवीपी की आंखों के माध्यम से इवेंटबस को देख रहा था। यूआई का परीक्षण करने के लिए वे क्या करते हैं, यह उन विचारों में अमूर्त है जिन्हें परीक्षण करते समय डमी के लिए बदला जा सकता है। आपका मामला कुछ हद तक अलग है क्योंकि आपके पास संभवतः इवेंटबस प्रति कैनवास होगा जो सभी कैनवास घटनाओं का प्रबंधन करता है। मैं अभी भी सुझाव देता हूं कि केवल अपनी खुद की घटनाओं को आकार दें (आकार बदलें, घूमें ...) जो कई लक्ष्यों को प्रभावित करेगा। –

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