通过 collection.push 添加模型时,如何将参数传递给我的 Backbonejs 模型的初始化函数?

How do I pass a parameter to my Backbonejs Models' initialize-function when adding models via collection.push?

所以我遇到了以下问题:

我有这样一个合集:

 MyApp.ArticleCollection = Backbone.Collection.extend({

        model: MyApp.ArticleModel,

        /**
         *  Fire func1-Event
         */
        func1: function () {
            ...
        }
    });

在 ajax 调用中这样填充:

self.collection.push(articleFromService);

现在我的问题是:创建模型时我需要两个不同的数据集。

到目前为止,这是我模型的初始化方法:

         /**
         *  init Articlemodel
         */
        initialize: function () {
            this.dc = MyApp.DataCollector.getInstance(); //just a ring.js-class for caching data on clientside
                this.set('Sizes', this.dc.sizes != null ? this.dc.sizes : this.dc.getValuesFromArticleFilter()); //needed for there are different "standard sizes"-arrays. 
        },

但我想要实现的是这样的,使用布尔开关:

         /**
         *  init Articlemodel 
         */
        initialize: function (isEditMode) {
            this.dc = MyApp.DataCollector.getInstance();
            if (!isEditMode) {
                this.set('Sizes', this.dc.sizes != null ? this.dc.sizes : this.dc.getValuesFromArticleFilter());
            }
        },

所以现在我遗憾地不知道如何将参数 isEditMode 传递给我在将其推入我的集合时初始化的每个模型。

如果您将选项对象传递给 .push(或 .add),集合会将选项对象传递给它创建的每个新模型。

考虑this

var Model = Backbone.Model.extend({
  initialize: function(attributes, options) {
    console.log(options.foo);
  }
});

var Collection = Backbone.Collection.extend({
  model: Model
});

var myCollection = new Collection();
myCollection.push([
  { id: 1 },
  { id: 2 }
], { foo: 'bar' });

该代码将记录 bar 两次(一次来自每个模型的 initialize)。

有了这些知识,您可以将 isEditMode 作为选项传递给 self.collection.push(articleFromService); 并在模型的初始化中访问它,就像我访问上面的 foo 选项一样。