无法以降序排列集合

时间:2014-10-28 15:07:55

标签: javascript sorting backbone.js backbone-collections

我正在尝试使用.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是否基于这些参数正确运行。

2 个答案:

答案 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