通过 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);
现在我的问题是:创建模型时我需要两个不同的数据集。
- 案例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
传递给我在将其推入我的集合时初始化的每个模型。
如果您将选项对象传递给 .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
选项一样。
所以我遇到了以下问题:
我有这样一个合集:
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
传递给我在将其推入我的集合时初始化的每个模型。
如果您将选项对象传递给 .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
选项一样。