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()
-请参见此示例: