添加时自动递增 backbone 模型属性值?
Automatically increment backbone model attribute value on add?
我想在每次将新模型添加到集合中时增加模型位置属性,我尝试将默认值转换为 returns 位置等于 ++collection 的函数,但没有成功。任何人都可以建议执行此操作的最佳方法吗?
var Col = Backbone.Collection.extend()
var Mod = Backbone.Model.extend({
defaults() {
return {
position: ++this.collection.length
}
}
})
var col = new Col([{
id: 1
}, {
id: 2
}])
col.toJSON() // returns [{id: 1}, {id: 2}]
您有 2 个不同的问题。
- Set Backbone model's defaults based on a collection attribute
但如果只是为了职位,这可能没有必要。
- 跟踪模型在集合中的位置。
使用集合的 length
不足以 精确跟踪位置。
假设你有 3 个模型,第一个模型在位置 1,最后一个模型在位置 3。然后删除前两个模型并在最后添加一个新模型,集合长度现在为 2 , 你的位置已经不连贯了。
每次集合发生变化时,您都需要更新集合中所有模型的位置。
这是一个使用 update
event.
的简单示例
var PositionCol = Backbone.Collection.extend({
initialize: function(models, options) {
this.listenTo(this, 'update', this.updatePositions);
},
updatePositions: function(options) {
this.each(function(model, index) {
model.set({ position: index });
}, this);
},
});
我想在每次将新模型添加到集合中时增加模型位置属性,我尝试将默认值转换为 returns 位置等于 ++collection 的函数,但没有成功。任何人都可以建议执行此操作的最佳方法吗?
var Col = Backbone.Collection.extend()
var Mod = Backbone.Model.extend({
defaults() {
return {
position: ++this.collection.length
}
}
})
var col = new Col([{
id: 1
}, {
id: 2
}])
col.toJSON() // returns [{id: 1}, {id: 2}]
您有 2 个不同的问题。
- Set Backbone model's defaults based on a collection attribute
但如果只是为了职位,这可能没有必要。 - 跟踪模型在集合中的位置。
使用集合的 length
不足以 精确跟踪位置。
假设你有 3 个模型,第一个模型在位置 1,最后一个模型在位置 3。然后删除前两个模型并在最后添加一个新模型,集合长度现在为 2 , 你的位置已经不连贯了。
每次集合发生变化时,您都需要更新集合中所有模型的位置。
这是一个使用 update
event.
var PositionCol = Backbone.Collection.extend({
initialize: function(models, options) {
this.listenTo(this, 'update', this.updatePositions);
},
updatePositions: function(options) {
this.each(function(model, index) {
model.set({ position: index });
}, this);
},
});