C'è un filo su questo argomento in https://github.com/marionettejs/backbone.marionette/issues/78
Anche se Backbone mantiene la raccolta differenziata, una volta si definisce un comparatore, come @breischl sottolineato, burattino non automaticamente ri-renderizzare il CollectionView in caso di modifiche di ordine . In effetti, Marionette ascolta l'evento add
nella raccolta e aggiunge a un nuovo ItemView.
Se volete che il vostro CollectionView
per visualizzare sempre gli elementi in ordine cronologico inverso, e si desidera che i nuovi elementi aggiunti per essere anteposto invece di allegata, quindi l'override del metodo appendHtml
nel vostro CollectionView
come segue:
var MyCollectionView = Backbone.Marionette.CollectionView.extend({
appendHtml: function(collectionView, itemView){
collectionView.$el.prepend(itemView.el);
}
});
Se si desidera essere in grado di inserire in una posizione particolare come @dira menzionato nel commento, esiste una soluzione pubblicata nel link in alto su github di sberryman che riproduco qui per comodità (disclaimer: non ho testato il codice qui sotto personalmente):
Cambio appendHtml a:
appendHtml: function(collectionView, itemView) {
var itemIndex;
itemIndex = collectionView.collection.indexOf(itemView.model);
return collectionView.$el.insertAt(itemIndex, itemView.$el);
}
e aggiungere la seguente estendere jQuery
per fornire insertAt
funzione:
(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);
fonte
2012-05-09 04:46:04
No reverse() - il metodo è disponibile nei metodi underscore.js purtroppo. – hbruce
Haha buon punto! Non è davvero una pietra angolare della mia risposta, però. Puoi invertirlo usando un approccio diverso: '_.each (_.toArray (this.collection) .reverse(), function (m) {...});'. Oppure se stavi usando il coffeescript potresti semplicemente scrivere un ciclo for con un -1 step, ecc. – rfunduk