2013-02-15 37 views
7

मैं कैसे बैकबोन संग्रहों में प्रचार से रीढ़ मॉडल घटनाओं रोक सकता हूं?संग्रह घटना प्रसार के लिए रीढ़ की हड्डी मॉडल को कैसे रोकें?

संपादित करें:

चलो कहते हैं कि मैं निम्नलिखित है, जहां CollectionView MyModels का संग्रह होता की तरह कुछ करते हैं ...

var CollectionView = Backbone.Collection.Extend({ 
    initialize: function() { 
     this.collection.on("change", doStuff); 
    } 
}); 

var ModelView = Backbone.View.Extend({ 
    initialize: function() { 
     this.model = new MyModel(); 
     this.model.on("change", doStuff); 
     this.model.fetch(); 
    } 
}); 

एक विशेष मामले में मैं "परिवर्तन" घटना नहीं करना चाहता था, तो प्राप्त करने के बाद संग्रह तक प्रचार करने के लिए, मैं सोच रहा हूं कि इसे रोकने का कोई तरीका है या नहीं।

धन्यवाद

+1

मॉडल रीसेट ईवेंट को सक्रिय नहीं है, आप अपने प्रश्न पर विस्तार कर सकता है? विशेष रूप से आप कौन सा कोड चला रहे हैं जो उस कार्यक्रम को फायर कर रहा है जिसे आप प्रसारित नहीं करना चाहते हैं? – Tomdarkness

+0

@ टॉमडर्केनेस के बिंदु पर, आपके द्वारा दिखाया गया कोड ईवेंट बाइंडिंग है। वास्तव में घटना को ट्रिगर कर रहा है क्या? (मुझे लगता है कि यह एक अच्छा सवाल है, क्योंकि जवाब AFAIK दस्तावेज़ों में स्पष्ट नहीं है।) – Mathletics

+0

मुझे पता नहीं था कि मॉडलों ने रीसेट ईवेंट को आग नहीं दी - जानना अच्छा है। – user1031947

उत्तर

8

एक परिवर्तन घटना शुरू होने से ही मॉडल रोकने के लिए:

model.set(attrs, {silent: true}); 

यह नहीं हो सकता है कि आप क्या चाहते, हालांकि, क्योंकि यह भी फायरिंग से मॉडल के परिवर्तन घटना नहीं कर पाएगा।

संग्रह सभी मॉडल की घटनाओं के माध्यम से पारित है, लेकिन आप क्या कर सकते अतिरिक्त विकल्प जो भी माध्यम से पारित हो जाएगा पारित है:

model.set(attrs, {dontBubble: true}); 

और अपने CollectionView में:

var CollectionView = Backbone.View.extend({ 
    this.initialize = function() { 
    this.collection.on('change', doStuff, this); 
    }, 
    this.doStuff = function(model, collection, options) { 
    if (options.dontBubble) { 
     return; 
    } 
    // Do some stuff. 
    } 
}); 

दी है, यह एक है थोड़ा बदसूरत, लेकिन इसके बारे में जाने का यह एक तरीका है।