[英]Automatically increment backbone model attribute value on add?
我想在每次将新模型添加到集合时增加模型位置属性,我尝试将默认值转换为返回等于++集合的位置但没有成功的函数。 任何人都可以建议最好的方法来做到这一点?
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}]
你有两个不同的问题。
使用集合的length
不足以精确地跟踪位置。
想象一下,你有3个模型,第一个模型位于第1位,最后一个模型位于第3位。然后前两个模型被移除,最后添加了一个新模型,收集长度现在为2,你将拥有已经不连贯的立场了。
每次集合发生变化时,您都需要更新集合中所有模型的位置。
这是使用update
事件的简单示例。
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);
},
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.