我有一个包含名称和日期的待办事项列表。我希望能够使用标题或日期对列表进行排序。我该怎么做?比较器只允许一种类型的排序。
谢谢。
我有一个包含名称和日期的待办事项列表。我希望能够使用标题或日期对列表进行排序。我该怎么做?比较器只允许一种类型的排序。
谢谢。
可以在比较器中实现更多逻辑,以便您可以抽象出一些排序逻辑:
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);
这有一个额外的好处,即每次添加模型时,它都会调用比较器并使用您当前的设置对其进行排序,因为排序方法存储在集合中。
您可能需要在这里查看答案,这是该帖子中提供的解决方案:
comparator: function(item) {
return [item.get("level"), item.get("title")]
}
我想我找到了一个方法:
collection.reset(collection.sortBy(function(item){
return item.get(sortingFIeld);
}))
其中 sortBy 返回一个新的排序数组,该数组作为参数传递给 reset。SortingField 是模型的字符串属性。