वहाँ https://github.com/marionettejs/backbone.marionette/issues/78
में इस विषय पर एक धागा हालांकि रीढ़ एक बार आप एक तुलनित्र परिभाषित संग्रह सॉर्ट किया, के रूप में @breischl ने बताया रहता है, कठपुतली नहीं स्वचालित रूप से CollectionView जब आदेश परिवर्तनों को पुनः प्रस्तुत करना है । वास्तव में, मैरियनेट संग्रह पर add
ईवेंट सुनता है और एक नया आइटम दृश्य जोड़ता है।
आप अपने CollectionView
हमेशा रिवर्स कालानुक्रमिक क्रम में आइटम प्रदर्शित करना चाहते हैं, और आप चाहते हैं नए आइटम prepended बजाय संलग्न, तो अपने CollectionView
में appendHtml
विधि ओवरराइड इस प्रकार होना करने के लिए जोड़ा है:
var MyCollectionView = Backbone.Marionette.CollectionView.extend({
appendHtml: function(collectionView, itemView){
collectionView.$el.prepend(itemView.el);
}
});
यदि आप टिप्पणी में उल्लिखित @ डीरा के रूप में किसी विशेष स्थान पर सम्मिलित करने में सक्षम होना चाहते हैं, तो सब्बरमैन द्वारा जिथब पर उपरोक्त लिंक पर एक समाधान पोस्ट किया गया है जिसे मैं सुविधा के लिए यहां पुन: पेश करता हूं (अस्वीकरण: मैंने परीक्षण नहीं किया है व्यक्तिगत रूप से नीचे कोड):
appendHtml बदलें:
appendHtml: function(collectionView, itemView) {
var itemIndex;
itemIndex = collectionView.collection.indexOf(itemView.model);
return collectionView.$el.insertAt(itemIndex, itemView.$el);
}
और जोड़ने jQuery
का विस्तार करने के insertAt
समारोह प्रदान करने के लिए निम्नलिखित:
(function($) {
return jQuery.fn.insertAt = function(index, element) {
var lastIndex;
if (index <= 0) return this.prepend(element);
lastIndex = this.children().size();
if (index >= lastIndex) return this.append(element);
return $(this.children()[index - 1]).after(element);
};
})(jQuery);
स्रोत
2012-05-09 04:46:04
दुर्भाग्यवश underscore.js विधियों में कोई रिवर्स() - विधि उपलब्ध नहीं है। – hbruce
हाहा अच्छा बिंदु! वास्तव में मेरे जवाब का आधारशिला नहीं है, हालांकि। आप एक अलग दृष्टिकोण का उपयोग कर इसे उलट सकते हैं: '_.each (_.toArray (this.collection) .reverse(), फ़ंक्शन (एम) {...});'। या यदि आप कॉफ़ीस्क्रिप्ट का उपयोग कर रहे थे तो आप केवल एक चरण के साथ लूप के लिए लिख सकते हैं, आदि – rfunduk