是否在添加时自动递增 Backbone.js 模型属性值?

093gszye  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(140)

我想在每次有新的模型加入集合时增加模型位置属性,我试过将默认值转换成一个返回等于++集合位置的函数,但没有成功。有人能告诉我最好的方法吗?

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}]
aij0ehis

aij0ehis1#

你有两个明显的问题。

  1. Set Backbone model's defaults based on a collection attribute
  • 但如果只是为了职位,这可能就没必要了 *

1.跟踪集合中模型的位置。
使用集合的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);
    },
});

相关问题