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

时间:2015-11-11 11:50:14

标签: backbone.js parameter-passing

所以我在这里遇到了以下问题:

我有一个这样的集合:

 MyApp.ArticleCollection = Backbone.Collection.extend({

        model: MyApp.ArticleModel,

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

在ajax调用中填充如下:

self.collection.push(articleFromService);

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

  • 案例A:这是一篇新文章。它应该有一个填充了每个可能对象的对象数组(例如,从XS到XXXL的大小或类似的东西,并不重要)。
  • 案例B:需要对文章进行编辑。在这种情况下,文章为数组选择了一些值(对于大小示例:XS,L,XL),我需要评估这些值以预填充编辑表格。

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

         /**
         *  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传递给我将其推入我的集合时初始化的每个模型。

1 个答案:

答案 0 :(得分:1)

如果将选项对象传递给.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选项的相同方式进行初始化