2012-07-02 5 views
5

Ich muss einen Wert aus der Ansicht an jedes Modell in einer Sammlung übergeben, während ich initialisiere.Backbone.js: Übergabe des Werts Von Sammlung zu jedem Modell

Till Collection können wir mit 'Optionen' im Backbone.Collection-Konstruktor übergeben.

Danach, gibt es irgendeine Technik, wo ich die 'Optionen' in jedes Modell innerhalb der Sammlung weitergeben kann?

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

Antwort

6

Sie können die Methode "_prepareModel" überschreiben.

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

Jetzt können Sie die Attribute an das Modell weitergegeben sehen in ‚initialisieren‘ und Sie werden some_imp_value erhalten, die Sie dann auf dem Modell entsprechend einstellen ..

0

Während es zu sein scheint undokumentiert habe ich festgestellt, dass in mindestens der neuesten Version von Backbone (v1.3.3) das an eine Collection übergebene Optionsobjekt an jedes Child-Modell übergeben wird, das in die anderen von der Collection generierten Optionsobjekte erweitert wird. Ich habe nicht die Zeit genutzt, um zu bestätigen, ob dies bei älteren Versionen der Fall ist.

Beispiel:

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

Hinweis: Ich bin nicht sicher, ob die Optionen für die nachfolgenden Ereignisse Collection.add übergebene Objekt wird

Verwandte Themen