2012-08-08 18 views
5

मेरे पास नाम और तारीख के साथ एक टोडो सूची है। मैं या तो शीर्षक या तारीख का उपयोग कर सूची को सॉर्ट करने में सक्षम होना चाहता हूं। यह मैं कैसे करूंगा? तुलनात्मक केवल एक प्रकार की सॉर्टिंग की अनुमति देता है।कई प्रकार के साथ Backbone.js संग्रह

धन्यवाद।

+1

क्या मैं पूछ सकता हूं कि आप संग्रह को रीसेट क्यों नहीं करना चाहते हैं? इस सटीक कारण के लिए रीसेट ट्रिगर (दृश्यों के लिए) हैं। यानी जब आपका सॉर्टिंग रीसेट के माध्यम से बदलता है तो आपका दृश्य पुनः प्रस्तुत करता है। –

+0

आप सही हैं, मुझे पूरे संग्रह को रीसेट करने में कोई नुकसान नहीं दिख रहा है। धन्यवाद। – chenglou

+0

डेटा बदलते समय संग्रह को रीसेट करना सामान्य है, आपके मामले में संपूर्ण संग्रह, भले ही यह वही डेटा हो, लेकिन अलग-अलग क्रम में –

उत्तर

1

मुझे लगता है कि मैं एक विधि पाया:

collection.reset(collection.sortBy(function(item){ 
    return item.get(sortingFIeld); 
})) 

sortBy कहाँ देता है एक नया, हल कर देता है कि तर्क रीसेट करने के लिए के रूप में पारित कर दिया है। सॉर्टिंगफ़िल्ल्ड मॉडल की स्ट्रिंग प्रॉपर्टी है।

comparator: function(item) { 
    return [item.get("level"), item.get("title")] 
} 
+0

उन्होंने विशेष रूप से कहा कि वह रीसेट का उपयोग नहीं करना चाहता है। और अब उसने इसे संपादित किया: पी आपकी गलती नहीं है। –

+1

मैं हालांकि मैं हूं। मैंने इसे संपादित किया क्योंकि इस पल के लिए मैं समाधान कर सकता हूं। – chenglou

+0

क्या आप अपना उत्तर विस्तारित कर सकते हैं? मैं एक ही चीज़ से निपट रहा हूं और सोच रहा हूं कि आप कहां निर्दिष्ट करते हैं कि किस विशेषता (शीर्षक या दिनांक) को सॉर्ट करना है। – CamelBlues

3

आप the answer here को देखने के लिए आवश्यकता हो सकती है, यहाँ उस पोस्ट में प्रदान की समाधान है:

var Collection = Backbone.Collection.extend({ 

    model: myModel, 
    order: 'name' 

    comparator: function(model) { 
     if (this.order === 'name') { 
      return model.get('name'); 
     } else { 
      return model.get('date'); //or modify date into a numeric value 
     } 
    } 
}); 

तो आप कैसे चाहते हैं कि उसे हल कर बदलने के लिए:

myCollection.order = 'date'; 
myCollection.sort(); 

यह तुलनित्र समारोह को कॉल करेगा और इसे इस तरह सॉर्ट करेगा।

आप एक दृश्य में सहारा के लिए सुन सकते हैं:

this.listenTo(myCollection,'sort',this.render); 

यह अतिरिक्त लाभ है कि हर बार एक मॉडल जोड़ा जाता है, यह तुलनित्र कॉल करता है और का उपयोग कर जो भी आपके वर्तमान सेटिंग है यह सॉर्ट करता है, क्योंकि सॉर्टिंग विधि संग्रह में संग्रहीत है।

4

यह तुलनित्र में और अधिक तर्क लागू करने के लिए संभव है, ताकि आप दूर सार कर सकते हैं कि छँटाई तर्क के कुछ:

+0

+1। विकल्प यह है कि आप अपने आवेदन के बीच की जानकारी कैसे पास करते हैं कि कार्यों की आवश्यकता होती है। – Throttlehead

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