2012-07-02 15 views
5

Devo passare un valore dalla vista a ciascun modello all'interno di una raccolta, durante l'inizializzazione.Backbone.js: Passaggio del valore Dalla raccolta a ciascun modello

Fino alla raccolta possiamo passare con 'opzioni' nel costruttore Backbone.Collection.

Dopo questo, c'è qualche tecnica in cui posso passare alcune "opzioni" in ogni modello all'interno della collezione?

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; 
    } 
}); 

risposta

6

È possibile eseguire l'override del metodo "_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); 
    } 
}); 

Ora si può guardare gli attributi passati al modello 'inizializzazione' e avrete some_imp_value, che è quindi possibile impostare il modello a seconda dei casi ..

0

Mentre sembra essere non documentato, ho trovato che almeno nella versione più recente di backbone (v1.3.3) l'oggetto delle opzioni passato a una raccolta viene passato a ogni modello figlio, esteso agli altri elementi opzione generati dalla collezione. Non ho speso il tempo per confermare se questo è il caso di versioni precedenti.

Esempio:

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"}); 

Nota: Non sono sicuro se le opzioni oggetto viene passato ai successivi eventi Collection.add

Problemi correlati