2012-07-02 30 views
5

मुझे प्रारंभ करने के दौरान, संग्रह के अंदर प्रत्येक मॉडल को दृश्य से मूल्य को पास करने की आवश्यकता है।Backbone.js: संग्रह से मूल्य प्रत्येक मॉडल में

संग्रह तक हम बैकबोन में 'विकल्प' के साथ पास कर सकते हैं। चयन कन्स्ट्रक्टर।

इसके बाद, क्या कोई तकनीक है जहां मैं संग्रह के अंदर प्रत्येक मॉडल में कुछ 'विकल्प' पास कर सकता हूं?

var Song = Backbone.Model.extend({ 
    defaults: { 
     name: "Not specified", 
     artist: "Not specified" 
    }, 
    initialize: function (attributes, options) { 
     //Need the some_imp_value accessible here 
    }, 
}); 

var Album = Backbone.Collection.extend({ 
    model: Song 

    initialize: function (models, options) { 
     this.some_imp_value = option.some_imp_value; 
    } 
}); 

उत्तर

6

आप "_prepareModel" विधि को ओवरराइड कर सकते हैं।

var Album = Backbone.Collection.extend({ 
    model: Song 

    initialize: function (models, options) { 
     this.some_imp_value = option.some_imp_value; 
    }, 

    _prepareModel: function (model, options) { 
     if (!(model instanceof Song)) { 
      model.some_imp_value = this.some_imp_value; 
     } 
     return Backbone.Collection.prototype._prepareModel.call(this, model, options); 
    } 
}); 
अब

आप विशेषताओं के प्रारंभ 'में मॉडल के लिए पारित देख सकते हैं और आप some_imp_value मिल जाएगा, तो आप के रूप में उपयुक्त मॉडल पर सेट कर सकते हैं जो ..

0

हालांकि यह प्रतीत होता है अनियंत्रित, मैंने पाया है कि कम से कम रीढ़ की हड्डी का नवीनतम संस्करण (v1.3.3) कि संग्रह में पारित विकल्प ऑब्जेक्ट प्रत्येक बच्चे मॉडल को पास किया जाता है, जो संग्रह द्वारा उत्पन्न अन्य विकल्प आइटमों में विस्तारित होता है। मैंने पुरानी रिलीज के मामले में यह पुष्टि करने के लिए समय नहीं बिताया है।

उदाहरण:

var Song = Backbone.Model.extend({ 
    defaults: { 
     name: "Not specified", 
     artist: "Not specified" 
    }, 
    initialize: function (attributes, options) { 
     //passed through options 
     this.some_imp_value = options.some_imp_value 

     //accessing parent collection assigned attributes 
     this.some_other_value = this.collection.some_other_value 
    }, 
}); 

var Album = Backbone.Collection.extend({ 
    model: Song 

    initialize: function (models, options) { 
     this.some_other_value = "some other value!"; 
    } 
}); 

var myAlbum = new Album([array,of,models],{some_imp_value:"THIS IS THE VALUE"}); 

नोट: मैं अनिश्चित हूं विकल्प वस्तु बाद Collection.add घटनाओं

को पारित कर दिया है, तो
संबंधित मुद्दे