添加模型
向集合中添加元素的路径相对简单。当模型被添加到集合时,在选项中会获取到index
。这个索引是基于排序的索引,如果您有一个简单的视图,就可以在特定索引处插入视图。
更改排序属性
这有点棘手,我没有现成的答案(我有时也会遇到这个问题),因为当您最初添加它时,集合不会自动重新排列其按模型进行排序的属性。
透过backbone文档看:
具有比较函数的集合如果稍后更改了模型属性,则不会自动重新排序,因此在更改可能影响顺序的模型属性后,您可能希望调用sort。
因此,如果您在集合上调用排序,它将触发重置事件,您可以挂钩它以触发整个列表的重新绘制。
在处理相当长且可能严重降低用户体验甚至导致挂起的列表时,这非常无效。
因此,您从中学到的几件事情是:
- 始终可以通过调用
collection.indexOf(model)
通过排序找到模型的索引
- 从
add
事件中获取模型的索引(第三个参数)
编辑:
思考了一会儿后,我想出了这样的东西:
var Model = Backbone.Model.extend({
initialize: function () {
this.bind('change:name', this.onChangeName, this);
},
onChangeName: function ()
{
var index, newIndex;
index = this.collection.indexOf(this);
this.collection.sort({silent: true});
newIndex = this.collection.indexOf(this);
if (index !== newIndex)
{
this.trigger('reindex', newIndex);
}
}
});
然后在您的视图中,您可以听
var View = Backbone.View.extend({
initialize: function () {
this.model.bind('reindex', this.onReindex, this);
},
onReindex: function (newIndex)
{
$("ul li").eq(newIndex).after(this.$el);
}
});