我正在构建一个显示书籍列表的Backbone应用程序,但是当我添加新书时,通过编辑视图,他会转到列表底部而不是顶部。所以基本上我想用比较器来反转我的收藏顺序,但是我试过它不起作用:
comparator: function (model) {
return -model.get('id');
}
这是一个包含所有代码的JSFiddle:http://jsfiddle.net/swayziak/9R9zU/4/
我不知道问题是否只与比较器有关,或者我是否需要在代码的其他部分更改更多内容。
答案 0 :(得分:2)
为什么不是一个简单的prepend
而不是append
this.$el.prepend(
答案 1 :(得分:2)
您的比较器正在寻找型号ID:
comparator: function (model) {
return -model.get('id');
}
但您的模型都没有id
属性。通常id
将来自服务器,因此服务器将在引导集合时提供初始id
值,然后在您{{{由服务器)分配新的id
时3}}模型。
如果您将id
添加到数据中,那么事情就会变得更有意义。
你还需要调整你的小提琴:
this.listenTo(this.collection, 'add', this.render);
而不是:
this.listenTo(this.collection, 'add', this.renderBook);
因为您的编辑面板将终止所有HTML,您需要重新渲染整个集合。
一旦超过该限制,您就会发现编辑链接不再有效。那是因为你试图在弄乱他们el
的内容时重复使用视图。相反,你应该:
el
。view.remove()
删除视图。el
放入容器中。您会发现,由于您的所有视图都共享一个公共容器,因此您不再需要将集合视图绑定到集合的'add'
事件,而是将折腾并重建整个视图。