模型添加
添加元素的路径相当简单,当模型添加到集合时,您会在选项中获得index。这个索引是排序索引,基于如果你有一个简单的视图,在某个索引处插入你的视图应该很容易。
排序属性变化
这个有点棘手,我没有方便的答案(我有时也为此苦苦挣扎),因为在您更改模型获得的属性后,集合不会自动重新调整其顺序在您最初添加它时排序。
来自主干文档:
具有比较器功能的集合不会自动重新排序
如果您稍后更改模型属性,那么您可能希望调用 sort
在更改会影响顺序的模型属性之后。
因此,如果您对集合调用 sort ,它将触发 reset 事件,您可以挂钩该事件以触发整个列表的重绘。
在处理相当长的列表时非常无效,并且会严重降低用户体验甚至导致挂起
因此,您可以摆脱这一点的几件事就是知道您可以:
- 调用
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);
// or
// this.collection.trigger('reindex', this, newIndex);
}
}
});
然后在你看来你可以听
var View = Backbone.View.extend({
initialize: function () {
this.model.bind('reindex', this.onReindex, this);
},
onReindex: function (newIndex)
{
// execute some code that puts the view in the right place ilke
$("ul li").eq(newIndex).after(this.$el);
}
});