Backbone.js集合有多种排序

时间:2012-08-08 18:23:19

标签: javascript sorting collections backbone.js

我有一个名单和日期的待办事项列表。我希望能够使用标题或日期对列表进行排序。我该怎么做?比较器只允许一种类型的排序。

感谢。

3 个答案:

答案 0 :(得分:4)

可以在比较器中实现更多逻辑,以便您可以抽象出一些排序逻辑:

var Collection = Backbone.Collection.extend({

    model: myModel,
    order: 'name'

    comparator: function(model) {
        if (this.order === 'name') {
            return model.get('name');
        } else {
            return model.get('date'); //or modify date into a numeric value
        }
    }
});

然后改变你想要的排序方式:

myCollection.order = 'date';
myCollection.sort();

这将调用比较器函数并以这种方式对其进行排序。

您可以在视图中聆听诉求:

this.listenTo(myCollection,'sort',this.render);

这样做的另一个好处是,每次添加模型时,它都会调用比较器并使用当前设置对其进行排序,因为排序方法存储在集合中。

答案 1 :(得分:3)

您可能需要查看the answer here,这是该帖子中提供的解决方案:

comparator: function(item) {
    return [item.get("level"), item.get("title")]
}

答案 2 :(得分:1)

我想我找到了一个方法:

collection.reset(collection.sortBy(function(item){
    return item.get(sortingFIeld);
}))

其中sortBy返回一个新的,已排序的数组,该数组作为参数传递给reset。 SortingField是模型的字符串属性。