2014-10-28 3 views
-1

Я пытаюсь сортировать свою коллекцию с помощью .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 else выполняются правильно на основе этих параметров.

ответ

0

Вы должны использовать метод sortBy() вместо sort().

Как объясняется в методе documentation, sort(), просто перебирает коллекцию (как и каждый раз при вставке новой модели) и выдает событие «сортировка».

sortBy() метод принимает функцию компаратор, которая будет определять порядок (как в вашем примере) (documentation). Учтите, что вместо написания

function(a, b){return a-b} 

вы должны написать что-то вроде этого

function(a, b){return a.get("field")-b.get("field")} 

Таким образом, вы сравнение объектов игровых полей вместо результата toValue() метода объекта.

0

Ваши модели не отсортированы в порядке убывания, потому что sort() не принимает компаратор обратного вызова (см SortBy() в документации)

Вы должны поставить свою логику в comperator() - см пример: http://jsbin.com/petetiwiqo/1/edit?html,js,output

Смежные вопросы