0

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

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

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

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

4

2 回答 2

2

为什么不简单prepend而不是append

this.$el.prepend(
于 2013-08-13T22:53:38.490 回答
2

您的比较器正在寻找模型 ID:

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

但是您的模型都没有id属性。通常sid来自服务器,因此服务器将id在引导集合时提供初始值,然后在您建立模型id时(由服务器)分配新的 s 。save

如果您将ids 添加到数据中,那么事情将开始变得更有意义。

您还需要将小提琴调整为:

this.listenTo(this.collection, 'add', this.render);

代替:

this.listenTo(this.collection, 'add', this.renderBook);

因为你的编辑面板会杀死所有的 HTML,你需要重新渲染整个集合。

一旦你过去了,你会发现你的编辑链接不再有效。那是因为你试图重用视图,同时弄乱它们的内容el。相反,您应该:

  1. 停止尝试重用视图,这几乎不值得麻烦。
  2. 让每个视图都有自己的独特之处el
  3. view.remove()在将新视图放入公共容器之前调用以删除视图。
  4. 然后创建新视图,渲染它,并将其el放入容器中。

您会发现,由于您的所有视图共享一个公共容器,您将不再需要将集合视图绑定到集合的'add'事件,而是折腾和重建整个视图。

于 2013-08-14T03:23:14.827 回答