मैंने संग्रह से अगले या पिछले मॉडल को प्राप्त करने के कुछ अलग-अलग तरीकों को देखा है, लेकिन यह सोच रहा था कि अगर कोई इसे लागू करने का निर्णय लेता है तो कोई सलाह दे सकता है। मेरा संग्रह आदेश दिया गया है, लेकिन जिस आईडी पर मैं सॉर्ट कर रहा हूं वह अनुक्रमिक होने की गारंटी नहीं है। यह केवल अद्वितीय होने की गारंटी है। मान लें कि छोटे आईडी संग्रह में "पुरानी" प्रविष्टियां हैं और बड़ी आईडी "नई" हैं।संग्रह से अगले और पिछले मॉडल को प्राप्त करना
MyCollection = Backbone.Collection.extend({
model: MyModel,
initialize:function(){
this.getElement = this._getElement(0);
},
comparator: function(model) {
return model.get("id");
},
_getElement: function (index){
var self = this;
return function (what){
if (what === "next"){
if (index+1 >= self.length) return null;
return self.at(++index);
}
if (what === "prev"){
if (index-1 < 0) return null;
return self.at(--index);
}
// what doesn't equal anything useful
return null;
};
}
});
getElement का उपयोग कर, मैं चीजों को getElement ("अगले") और getElement ("पिछला") की तरह मेरे संग्रह में अगले या पिछले मॉडल के लिए पूछने के लिए करते हैं। GetElement से वापस क्या किया जाता है वास्तविक मॉडल है, सूचकांक नहीं। मैं collection.indexOf के बारे में जानता हूं, लेकिन मैं पहले से मॉडल शुरू करने के बिना संग्रह के माध्यम से लूप करने का एक तरीका चाहता था। क्या यह कार्यान्वयन कठिन होने की आवश्यकता है?
मुझे आपके कुछ विचार पसंद हैं, विशेष रूप से प्रारंभिक विधि में this.at() का उपयोग करना। यद्यपि आपका कोड हालांकि काफी लंबा है। यदि कोई और कुछ बेहतर और/या अधिक संक्षेप में सुझाव नहीं देता है, तो आपको हरे रंग की जांच मिल जाएगी :-) मेरी विधि कम है और जब आप किसी भी अंत तक पहुंच जाते हैं तो नल लौटकर संग्रह के अंत से गिरने से रोकता है। –
आप 'सेट/getElement' फ़ंक्शंस को हटाकर और' currentElement' मान को सीधे एक्सेस करके इसे छोटा कर सकते हैं। – abraham
यदि v0.9 + का उपयोग करना है तो आपको यह होना होगा .setElement (this.at (0)); जो वर्तमान में संग्रह बनाने के बाद बुलाए जाने वाले प्रारंभिक कार्य में है। ऐसा इसलिए है क्योंकि कलेक्शन मॉडल बनाने से पहले प्रारंभिक कहलाता है। उदाहरण: var myCollection = नया MyCollection (डेटा); myCollection.setElement (this.at (0)); –