添加时自动递增 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 个不同的问题。

  1. Set Backbone model's defaults based on a collection attribute
    但如果只是为了职位,这可能没有必要。
  2. 跟踪模型在集合中的位置。

使用集合的 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);
    },
});