2012-10-29 24 views
14

बैकबोन कठपुतली में, आप ट्रिगर और घटनाओं के साथ अत्यंत समान कर सकते हैं:रीढ़ की हड्डी में ट्रिगर और घटनाओं के बीच क्या अंतर है?

से चलाता है:

return Marionette.Layout.extend({ 
    triggers: { 
     'click .something': 'view:handleClickSomething' 
    }, 

    initialize: function(){ 
     this.bindTo(this, 'view:handleClickSomething', this.handleClickSomething); 
    }, 

    handleClickSomething: function(){} 
} 

बनाम घटनाओं:

return Marionette.Layout.extend({ 
    events: { 
     'click .something': 'view:handleClickSomething' 
    }, 

    handleClickSomething: function(ev){} 
} 

घटनाओं तरह से एक तेज आसान तरीका की तरह लगता है और वास्तविक घटना पर ही इसे प्राप्त करना आसान बनाता है (क्योंकि यह स्वचालित रूप से पारित हो जाता है)। क्या एक दूसरे का उपयोग करने का कोई कारण है? उनके इच्छित उपयोग के मामले क्या हैं? इस ऑनलाइन के बारे में अधिक जानकारी प्राप्त करने में परेशानी होने के कारण (एनोटेटेड स्रोत को ग्रोक करने की कोशिश करने के अलावा) ...

(मैंने केवल घटनाओं की विधि की खोज की है, और अब तक सब कुछ के लिए ट्रिगर का उपयोग कर रहे हैं क्योंकि मैंने सोचा था कि वह था एकमात्र रास्ता)

उत्तर

15

आपका पहला उदाहरण ट्रिगर्स का खराब उपयोग है। ट्रिगर्स को दृश्य से किसी ईवेंट को ट्रिगर करने के लिए शॉर्टकट होने का मतलब है, ताकि बाहरी ऑब्जेक्ट ईवेंट को पकड़ सके, न कि ईवेंट को ट्रिगर करने वाले दृश्य को।

घटना उदाहरण:

events: { 
    'click hi': 'alertTitle', 
}, 

alertTitle: function() { 
    alert('Title!!'); 
} 

प्रत्येक घटना में, कुंजी ('click h1'

http://lostechies.com/derickbailey/2012/05/15/workflow-in-backbone-apps-triggering-view-events-from-dom-events/

+3

ऐसा लगता है कि यह वास्तव में पूछे जाने वाले प्रश्नों का उत्तर नहीं देता है, उदाहरण के लिए, "एक ट्रिगर ___ है, जबकि कोई ईवेंट ___ है।" यह मुझे स्पष्ट है कि एक ट्रिगर एक घटना ट्रिगर करता है, लेकिन एक घटना भी हो सकती है, इसलिए इस जवाब ने कुछ भी स्पष्ट नहीं किया। – meetalexjohnson

4

हम दोनों events और triggers जावास्क्रिप्ट वस्तुओं के रूप में लगता है, तो यहां का अंतर है) हमेशा एक डोम घटना और एक jQuery चयनकर्ता है, मूल्य ('alertTitle') हमेशा वें है कॉलबैक फ़ंक्शन का ई नाम, दृश्य के अंदर मौजूद है।

उत्प्रेरक उदाहरण:

triggers: { 
    'click h1': 'alert:title' 
}, 

प्रत्येक ट्रिगर में, कुंजी अभी भी एक डोम घटना है और एक jQuery चयनकर्ता, लेकिन मूल्य ('alert:title') हमेशा एक नई घटना आप चाहते हैं उसका नाम है शुरूवात करना। उस ईवेंट हैंडलर को कहीं भी परिभाषित किया जा सकता है, जरूरी नहीं कि वर्तमान दृश्य के अंदर।

  1. आप अपने डोम घटना के बजाय एक कॉलबैक फ़ंक्शन को कॉल की एक कठपुतली ईवेंट को सक्रिय करना चाहते हैं;: जब

    उत्प्रेरक उपयोगी है

  2. आप चाहते हैं कि आपका मैरियनेट ईवेंट का हैंडलर वर्तमान दृश्य के बाहर कहीं न हो, उदाहरण के लिए इसके मूल दृश्य। इस मामले में, इस दृश्य के माता-पिता को onChildviewAlertTitle() फ़ंक्शन को alert:title ईवेंट को संभालने के लिए हो सकता है।
+1

मैं पहचानता हूं, कि 'चेतावनी: शीर्षक' ट्रिगर हमेशा 'अलर्टटाइटल' विधि पर आग लगती है (पूंजीकरण और 'उपसर्ग पर' जोड़ती है)। इसका मतलब है, कि 'ट्रिगर' न केवल घटना को मूल दृश्य में प्रकट करता है, बल्कि अपने mentod निष्पादित करने का भी प्रयास करता है। और oppozite रास्ता - 'घटनाओं: {' हाय क्लिक करें ':' अलर्ट: शीर्षक '} '- वही करेगा। – iegik