2012-04-22 19 views
5

मेरे ऐप में मेरे पास एक सॉकेट.ओ कनेक्शन है जो बैकएंड को सुन रहा है और क्लाइंट ब्राउज़र द्वारा रखे मॉडल के अपडेट प्राप्त कर रहा है (जो मॉडल को पुनर्प्राप्त करता है आईडी द्वारा और मॉडल विशेषता पर set पर कॉल करें)।backbone.js: मॉडलों का संग्रह अपडेट करें, पुनः क्रमबद्ध करें और फिर से प्रस्तुत करें मॉडल संग्रह

मैं संग्रह को सॉर्ट करना चाहता हूं, फिर set के परिणामस्वरूप मॉडल पर किसी भी नए ऑर्डरिंग को प्रतिबिंबित करने के लिए पूरी तरह से फिर से प्रस्तुत किया गया है (अधिकांश उदाहरण फिर से प्रस्तुत किए जाने वाले व्यक्तिगत विचारों के आसपास होते हैं)। इसे प्राप्त करने की विधि क्या है?

एनबी मुझे एक backbone.js लेआउट मिला है उदाहरण के लिए todo ऐप (यह पहला रीढ़ की हड्डी ऐप) से सुंदर verbatim उठाया है।

उत्तर

12

आप अपने संग्रह के लिए comparator विधि प्रदान करके जो भी चाहते हैं उसे प्राप्त कर सकते हैं।

उदाहरण:

ModelCollection = Backbone.Collection.extend({ 
    comparator: function(a, b) { 
     if (a.get("name") > b.get("name")) return 1; 
     if (a.get("name") < b.get("name")) return -1; 
     if (a.get("name") === b.get("name")) return 0; 
    }, 

    initialize: function() { 
     this.on('change:name', function() { this.sort() }, this); 
    } 
}); 

comparator इस उदाहरण में अपने संग्रह का कारण होगा अंदर मॉडल की name विशेषता के आधार पर आरोही क्रम में सॉर्ट किया जाना है।

ध्यान दें कि आपके संग्रह को models में से किसी एक के गुण (ओं) को बदलते समय स्वचालित रूप से सॉर्ट नहीं किया जाएगा। डिफ़ॉल्ट रूप से, सॉर्टिंग केवल तभी होता है जब नए मॉडल बनाते हैं और उन्हें संग्रह में जोड़ते हैं; लेकिन comparatorcollection.sort विधि द्वारा उपयोग किया जाएगा।

उपरोक्त कोड एक ईवेंट श्रोता सेट करके इसका लाभ उठाता है जो किसी भी change एस पर name पर models के गुणों को फिर से संग्रहीत करता है।

CollectionView = Backbone.View.extend({ 
    initialize: function() { 
     this.collection = new ModelCollection(); 
     this.collection.on('all', function() { this.render() }, this); 
    }, 

    render: function() { 
     this.$el.html(this.collection.toJSON()); 
    } 
}); 

यह :)


है कि:

तस्वीर को पूरा करने के लिए, हम यकीन है कि यह किसी भी परिवर्तन पर फिर से renders बनाने के लिए View संग्रह के साथ जुड़े में एक उपयुक्त घटना श्रोता की स्थापना

Backbone documentation से प्रासंगिक अंश:

डिफ़ॉल्ट रूप से कोई संग्रह के लिए comparator। यदि आप comparator को परिभाषित करते हैं, तो इसका उपयोग सॉर्ट किए गए क्रम में संग्रह को बनाए रखने के लिए किया जाएगा। इसका मतलब है कि मॉडल जोड़े जाने के बाद, उन्हें collection.models में सही इंडेक्स में डाला जाता है। एक तुलनित्र को sortBy (एक फ़ंक्शन पास करें जो एकल तर्क लेता है) के रूप में परिभाषित किया जा सकता है, sort (दो तर्कों की अपेक्षा करने वाले एक तुलनित्र फ़ंक्शन को पास करें), या स्ट्रिंग के रूप में इंगित करने वाली स्ट्रिंग के रूप में परिभाषित किया जा सकता है। [...]comparator के साथ संग्रह स्वचालित रूप से फिर से सॉर्ट नहीं होंगे यदि आप बाद में मॉडल विशेषताओं को बदलते हैं, तो आप ऑर्डर को प्रभावित करने वाले मॉडल विशेषताओं को बदलने के बाद sort पर कॉल करना चाहेंगे।

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