所以我在这里遇到了以下问题:
我有一个这样的集合:
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
传递给我将其推入我的集合时初始化的每个模型。
答案 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
选项的相同方式进行初始化