2012-07-02 34 views
5

我需要从视图中传递值到集合中的每个模型,同时初始化。Backbone.js:传递值从集合到每个模型

直到集合我们可以在Backbone.Collection构造函数中传递'options'。

之后,是否有任何技术可以将某些“选项”传递到集合中的每个模型中?

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)的最新版本中,传递给集合的options对象传递给每个子模型,并扩展到集合生成的其他选项。我还没有花时间确认旧版本的情况是否如此。

例子:

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事件