【问题标题】:Backbone.js: Passing value From Collection to each modelBackbone.js:将值从集合传递到每个模型
【发布时间】:2012-07-02 16:30:06
【问题描述】:

我需要在初始化时将视图中的值传递给集合中的每个模型。

直到集合,我们可以在 Backbone.Collection 构造函数中使用“选项”传递。

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

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

【问题讨论】:

    标签: javascript backbone.js backbone-relational


    【解决方案1】:

    您可以覆盖“_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);
        }
    });
    

    现在你可以在'initialize'中查看传递给模型的属性,你会得到一些_imp_value,然后你可以在模型上适当地设置它..

    【讨论】:

      【解决方案2】:

      虽然它似乎没有记录,但我发现至少在最新版本的骨干网 (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 事件

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-04
        • 2012-06-21
        • 2012-01-19
        • 2011-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-05
        相关资源
        最近更新 更多