Javascript 无法按降序方式对集合排序
我正在尝试使用Javascript 无法按降序方式对集合排序,javascript,sorting,backbone.js,backbone.js-collections,Javascript,Sorting,Backbone.js,Backbone.js Collections,我正在尝试使用.sort()对我的集合进行排序,但是我似乎只能以升序的方式对集合进行排序,因为集合的代码如下所示 var ProjectCollection = Backbone.Collection.extend({ url: '/projects', model: app.Project, sort_key: "finish_date", comparator: function (item) { return item.get(t
.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);
}
为什么我不能按降序排序?发送到collections函数的参数是正确的,并且if和if else根据这些参数正确运行。您应该使用
sortBy()
方法,而不是sort()
如,sort()
方法中所述,只需重新排序集合(每次插入新模型时都是这样),并发出“sort”事件
sortBy()。而不是写
function(a, b){return a-b}
你应该这样写
function(a, b){return a.get("field")-b.get("field")}
通过这种方式,您可以比较对象的字段,而不是对象的toValue()
方法的结果。您的模型不会按降序排序,因为sort()
不接受比较器回调(请参阅文档中的sortBy())
您需要将您的逻辑放入comperator()
-请参见此示例: