5

ईवेंट हैंडलर ठीक हैं जब आपके पास एक दृश्य है जो किसी अन्य दृश्य को संदर्भित करता है और इसकी घटनाओं को सुनता है, जो decoupling और reusability के लिए सही है।घटनाओं के साथ विचार डिजाइन पैटर्न के बीच संचार

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

लेकिन मुझे कहना है कि मैं की तरह एक दृश्य पदानुक्रम डालते हैं:

  • ParentView
    • ChildView
      • ChildView
        • ModalView

मैं ParentView में पता करने के लिए जब ModalView एक घटना ... मैं बुदबुदाती क्योंकि ModalView ही डोम पदानुक्रम में नहीं है घटना का उपयोग नहीं कर सकते चलाता है, तो चाहता था क्या मुझे इस मामले में इवेंट एग्रीगेटर का उपयोग करना चाहिए या कुछ और? मैं वास्तव में चाहता था कि घटना बुलबुला मेरे मामले में फिट हो सके।

उत्तर

2

यदि आप डोम के पदानुक्रम का उपयोग नहीं कर सकते हैं और आप एक ईवेंट एग्रीगेटर का उपयोग नहीं करना चाहते हैं तो मेरा पहला वृत्ति यह है कि आपको अपने विचारों में अपना पदानुक्रम बनाना होगा।

आप अपने स्वयं के ईवेंट बबलिंग सिस्टम को कार्यान्वित करने के तरीके के लिए backbone.courier पर एक नज़र डाल सकते हैं।

Backbone.courier uses the DOM to detect parent views लेकिन आप पैरेंट पहचान के लिए अपनी विधि को कार्यान्वित कर सकते हैं।

तो यह घटना एकत्रीकरण या डोम के बिना काम करने योग्य है, लेकिन मुझे लगता है कि आप अपना खुद का पदानुक्रम बनाने और प्रबंधित करना समाप्त कर देंगे। चूंकि हमारे पास पहले से ही डोम है, यह बदबू आ रही है। यह निश्चित रूप से मुझे प्रश्न बना देगा: "क्या मैं वास्तव में इस घटना को बुलबुला करने की आवश्यकता है?"।

अपने उदाहरण के लिए, सबसे सरल समाधान अपने ModalViewParentView के लिए एक संदर्भ देने के लिए और बस parentView.listener() फोन जब अपने भी ModalView पर निकाल दिया जाता है हो सकता है। क्या आपको वास्तव में बच्चों के माध्यम से बुलबुला करने की ज़रूरत है? क्या यह वास्तव में decoupled की जरूरत है? ऐसा हो सकता है कि जब आप मान लें कि आपके पास अपने अन्य दृश्य का संदर्भ नहीं है तो आप बहुत ही सीमित हैं।

वे प्रश्न हैं जो मैं खुद से पूछता हूं। हालांकि यह स्पष्ट लग सकता है यह सबसे अच्छा समाधान हो सकता है:

modalView.container = parentView; 

modalView.myEventHandler = function(e) { 
    this.container.myEventHandler(e); 
} 
+0

धन्यवाद आदमी, मुझे लगता है कि आप सही .. मेरे मामले में सबसे अच्छा समाधान एक ModalView मौजूद हो सकता है और संदर्भ फोन करने वाले/प्रस्तोता जो समझ में आता है .. ।जब ModalView किया जाता है और प्रस्तुतकर्ता को ट्रिगर करता है जिसे सबसे गहरा चाइल्ड व्यू कहा जाता है और यह बबल ट्रिगर को ParentView को सूचित करने के लिए ट्रिगर करता है – mateusmaso

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