2011-08-24 16 views
16

मैं विचारों और नियंत्रकों के पास एक अच्छा तरीका बनाने और उनके बीच संबंधों को कम करने का प्रयास कर रहा हूं।एमवीसी परिदृश्य में जावास्क्रिप्ट घटनाक्रम बनाम कॉलबैक

var customers = { 
    get: function(callback) { 
     $.get('/customers', {}, function(data) { 
      callback.call(this, data); 
     }); 
    } 
}; 

और इस तरह की एक घटना चालित दृष्टिकोण (घटना वस्तु सिर्फ छद्म कोड है):

एक घटना के लिए कई ग्राहकों के अलावा

, वहाँ इस तरह js कोड के बीच कोई बड़ा अंतर यह है

var customers = { 
    get: function() { 
     $j.get('/customers', {}, function(data) { 
      event.publish('customers.loaded', data); 
     }); 
    } 
}; 

दोनों मामलों में, ग्राहकों के ऑब्जेक्ट का उपभोक्ता अपने आंतरिक कार्यों से अनजान है। क्या एक तरफ दूसरे पर लाभ होता है?

उत्तर

8

इवेंट का कॉलबैक हैं, लेकिन अंतर यह है कि वे कब और कहां बाध्य हैं। पहले मामले में, आपको उस समय कॉलबैक का संदर्भ होना चाहिए जब get कहा जाता है, इसके अतिरिक्त यह एकल कॉलबैक तक सीमित है।

दूसरे परिदृश्य में, (मान लीजिए कि आप उस छद्म कोड के साथ एक ईवेंट ट्रिगर कर रहे हैं) आप get कहां से कॉलबैक को पार कर सकते हैं, जिससे मजबूत डेटा-इंकापुलेशन की अनुमति मिलती है। इसके अतिरिक्त, ईवेंट एकाधिक कॉलबैक ट्रिगर करने का समर्थन करते हैं, ताकि विभिन्न कार्यों को customers ऑब्जेक्ट तक पहुंचने के आधार पर निष्पादित किया जा सके।

मैं घटना-उन्मुख समाधान के साथ जाने की अनुशंसा करता हूं क्योंकि जावास्क्रिप्ट एक घटना-उन्मुख भाषा है।

4

जवाब काफी सीधे आगे है: के बाद से एक घटना असीमित ईवेंट हैंडलर्स (जो लेकिन कॉलबैक कुछ भी नहीं कर रहे हैं) हो सकता है ... और एक कॉलबैक सिर्फ एक भी कॉलबैक है, मेरा सुझाव है कि आप की ओर जाना घटना प्रोग्रामिंग विधि संचालित।

4

मैं मॉड्यूल बनाने के दौरान कॉलबैक-समाधान के लिए जाऊंगा। इसकी एक कम निर्भरता है: आपके ईवेंट ऑब्जेक्ट पर निर्भरता।

यदि मैं एक तृतीय पक्ष प्लगइन डाउनलोड करता हूं, तो कहें कि आप अभी इस पर काम कर रहे हैं, मैं इस बात पर नियंत्रण रखना चाहता हूं कि जब समारोह को निष्पादित किया जाता है और अपनी पसंद का उपयोग करके अपना स्वयं का कार्यक्रम उठाया जाता है घटना बस

यदि मॉड्यूल नहीं बना रहा है, तो मुझे लगता है कि दोनों समाधानों में उनका आकर्षण है। :)

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