我正在尝试使用.sort()
对我的集合进行排序,但我似乎只能以升序的方式对集合进行排序,通过集合的代码就是这样,
var ProjectCollection = Backbone.Collection.extend({
url: '/projects',
model: app.Project,
sort_key: "finish_date",
comparator: function (item) {
return item.get(this.sort_key);
},
sortByField: function(fieldName, orderType) {
console.log(fieldName, orderType);
this.sort_key = fieldName;
if(orderType == "acsending") {
this.sort(function(a, b){return a-b});
} else if(orderType == "descending") {
this.sort(function(a, b){return b-a});
}
}
});
sortByField函数从选择菜单更改的视图中触发,并触发此函数,
sortCollection: function(e) {
this.collection.sortByField($('.sort').val(), $('.order').val());
console.log(this.collection);
}
为什么我无法按降序排序?发送到集合函数的参数是正确的,if和if是否基于这些参数正确运行。
答案 0 :(得分:0)
您应该使用sortBy()
方法而不是sort()
。
如documentation中所述,sort()
方法只需重新排序集合(就像每次插入新模型时一样)并发出'sort'事件。
sortBy()
方法接受将定义顺序的函数Comparator(如您的示例中所示)(documentation)。考虑一下,而不是写
function(a, b){return a-b}
你应该写这样的东西
function(a, b){return a.get("field")-b.get("field")}
这样您可以比较对象的字段而不是对象的toValue()
方法的结果。
答案 1 :(得分:0)
您的模型没有按降序排序,因为sort()
不接受比较器回调(请参阅文档中的sortBy())
您需要将您的逻辑放在comperator()
中 - 请参阅此示例:http://jsbin.com/petetiwiqo/1/edit?html,js,output