初始化后对骨干集合进行排序

Jho*_*ung 52 backbone.js

我正在使用Backbone.js来呈现项目列表,例如Books.呈现列表后,用户可以选择对它们进行排序.因此,如果用户单击"按标题排序"或"按作者名称排序",则列表将在客户端进行排序.

  window.Book = Backbone.Model.extend({
   defaults: {
     title: "This is the title",
     author: "Name here"
   },
Run Code Online (Sandbox Code Playgroud)

在Backbone应用程序的上下文中使用什么是完成此类排序的最佳方法.我在AppView中使用jQuery dom分拣机吗?

sat*_*run 50

有一个关于这个话题的讨论你可能想看一下:https://github.com/documentcloud/backbone/issues/41.

缺点是,当用户选择"按X排序"时,您可以:

  1. comparator在Collection上设置功能
  2. 调用Collection的sort函数(将触发sort事件)
  3. sort在视图中监听事件,并(清除)重绘项目

处理步骤1和2的另一种方法是使用自己的方法调用Collection的sortBy方法,然后触发View可以侦听的自定义事件.

但似乎清理和重绘是最简单(甚至可能是最快)的方式来排序View并使它们与Collection的排序顺序保持同步.

  • 2. sort`事件的更正是在调用Collection的sort函数时被触发的事件,而不是`reset` (8认同)

小智 48

您可以更新比较器功能,然后调用sort方法.

// update comparator function
collection.comparator = function(model) {
    return model.get('name');
}

// call the sort method
collection.sort();
Run Code Online (Sandbox Code Playgroud)

视图将自动重新渲染.

  • ..发现它......使用减号'return -model.get('name');' (21认同)
  • 然后如何降序? (2认同)

Nic*_*ilt 12

comparator 是你需要的

var PhotoCollection = Backbone.Collection.extend({
    model: Photo,
    comparator: function(item) {
        return item.get('pid');
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 不是用于在初始化期间对集合进行排序的比较器.显示列表后,用户可以采取不同方式对其进行重新排序的操作,这就是我需要弄清楚的. (2认同)