2014-10-28 48 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()方法的結果。