Backbone:使用比较器反向收集订单

时间:2013-08-13 22:49:53

标签: javascript sorting backbone.js backbone-views

我正在构建一个显示书籍列表的Backbone应用程序,但是当我添加新书时,通过编辑视图,他会转到列表底部而不是顶部。所以基本上我想用比较器来反转我的收藏顺序,但是我试过它不起作用:

comparator: function (model) {
    return -model.get('id');
}

这是一个包含所有代码的JSFiddle:http://jsfiddle.net/swayziak/9R9zU/4/

我不知道问题是否只与比较器有关,或者我是否需要在代码的其他部分更改更多内容。

2 个答案:

答案 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的内容时重复使用视图。相反,你应该:

  1. 停止尝试重新使用视图,这几乎不值得麻烦。
  2. 为每个视图指定唯一的el
  3. 在将新视图放入公共容器之前,调用view.remove()删除视图。
  4. 然后创建新视图,渲染它,并将其el放入容器中。
  5. 您会发现,由于您的所有视图都共享一个公共容器,因此您不再需要将集合视图绑定到集合的'add'事件,而是将折腾并重建整个视图。