2012-03-21 83 views
8

我所擁有的用戶(六是精確的)與「名字」,「姓氏」屬性的集合在列表中。做一個fetch,下面的比較器按'firstname'對它們進行排序,並且它工作正常。骨幹/下劃線sortBy不分類收集

comparator : function (user) { 
    return user.get("firstname").toLowerCase(); 
} 

但如果我嘗試收集後進行排序,通過不同的值,即「姓」,這是行不通的。訂單保持不變。

this.collection.sortBy(function(user) { 
    return user.get("lastname").toLowerCase(); 
}); 

我在做什麼錯?


更新


所以從sortBy返回的數據進行排序,但因爲我的看法是鏈接到集合,並不能幫助我真的。如果我重新收集並添加排序的數組回到集合這是比較它的工作並對其排序,返回到「姓名」的順序。

var sorted = this.collection.sortBy(function(user) { 
    return user.get("lastname").toLowerCase(); 
}); 

回答

11

sortBy函數不會對當前集合中的對象進行排序。它返回一個排序的集合:


var sortedCollection = this.collection.sortBy(function(user){ 
    return user.get("lastname").toLowerCase(); 
}); 

現在你可以使用sortedCollection它會被正確排序。

+0

由於德里克。並感謝您的網站。這是一個偉大的開發人員資源。 – screenm0nkey 2012-03-21 13:35:44

+0

是不是比較函數應該返回整數? – 2012-03-22 08:41:42

+2

請注意,這將返回一個列表而不是一個集合。不是一個很大的交易,但值得一提。 – Chris 2013-06-15 08:10:33

3

下劃線的sortBy其骨幹網使用,回報的分類收集不到位了排序... 舉例說明:

如果你想:

var flinstones = [{first: 'Baby', last: 'Puss'}, {first: 'Fred', last: 'Flinstone'}]; 
var sorted = _.sortBy(flinstones, function (character) { return character.last ; }); 
console.log(sorted); 
console.log(flinstones); 
+1

+1感謝您的回覆。 – screenm0nkey 2012-03-21 13:34:49

13

爲您更新迴應改變這種狀況的收集是由它排序中使用的順序是相應的視圖然後你可以只更新comparator,然後調用sort得到模型重新排序。那麼這將觸發一個sort事件,您認爲可以監聽並相應地更新自己。

this.collection.comparator = function (user) { 
    return user.get("firstname").toLowerCase(); 
}; 

this.collection.sort(); 
+0

+1感謝您的回覆。那就是我現在要做的。 – screenm0nkey 2012-03-21 13:34:34

+0

這絕對是這裏最好的答案。 – Chris 2013-06-15 07:45:08