2012-03-21 14 views
8

मेरे पास 'firstname', 'lastname' गुणों वाले संग्रह में उपयोगकर्ताओं की एक सूची (सटीक होने के लिए छः) है। एक fetch करना, नीचे तुलनित्र उन्हें 'firstname' द्वारा क्रमबद्ध करता है, और यह ठीक काम करता है।बैकबोन/अंडरस्कोर सॉर्ट बाई संग्रह को सॉर्ट नहीं कर रहा है

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

लेकिन उदाहरण के लिए 'उपनाम', यह काम नहीं करता है, तो मैं बाद में संग्रह सुलझाने की कोशिश, एक अलग मूल्य से। आदेश वही रहता है।

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

मैं क्या गलत कर रहा हूं?


अद्यतन


तो डेटा sortBy से लौटे क्रमबद्ध किया जाता है, लेकिन है कि मुझे वास्तव में मदद नहीं करता है के रूप में मेरे विचार संग्रह से जुड़ा हुआ है। अगर मैं संग्रह को रीसेट करता हूं और सॉर्ट किए गए सरणी को संग्रह में वापस जोड़ता हूं तो यह तुलनित्र यह काम करता है और इसे 'firstname' ऑर्डर में वापस भेजता है।

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

+0

यह नहीं है कि तुलनित्र फ़ंक्शन को पूर्णांक वापस करना चाहिए? –

+2

ध्यान दें कि यह एक सूची देता है और संग्रह नहीं। उल्लेख करने लायक लेकिन एक बड़ा सौदा नहीं है। – Chris

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

13

अपने अपडेट में प्रतिक्रिया देने के लिए संग्रह को इसके संबंधित दृश्य द्वारा उपयोग के लिए क्रमबद्ध करने के क्रम को बदलने के लिए, तो आप मॉडल को फिर से क्रमबद्ध करने के लिए comparator अपडेट कर सकते हैं और फिर sort पर कॉल कर सकते हैं। इसके बाद यह sort ईवेंट को आग लगाएगा, जिस पर आपका विचार तदनुसार सुन सकता है और अपडेट हो सकता है।

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

this.collection.sort(); 
+0

+1 प्रतिक्रिया के लिए धन्यवाद। यही वह है जो मैं करूँगा। – screenm0nkey

+0

यह निश्चित रूप से यहां सबसे अच्छा जवाब है। – Chris

संबंधित मुद्दे