Hai oggetti Date in modo da poter utilizzare getTime
per convertirli in numeri e poi negare quei numeri per ottenere il massimo - Prima le date. Se si desidera mantenere la vostra collezione ordinato poi un confronto come questo:
C = Backbone.Collection.extend({
//...
comparator: function(m) {
return -m.get('date').getTime();
}
});
farà il trucco. Demo (aprire la console per favore): http://jsfiddle.net/ambiguous/htcyh/
collezioni Backbone anche include sottolineatura di sortBy
in modo che si possa fare una sola volta sorta:
var sorted = c.sortBy(function(m) { return -m.get('date').getTime() });
Demo: http://jsfiddle.net/ambiguous/FF5FP/
Oppure si potrebbe usare toArray
per ottenere un normale array JavaScript e utilizzare lo standard sort
senza utilizzare getTime
:
var sorted = c.toArray().sort(function(a, b) {
a = a.get('date');
b = b.get('date');
if(a > b)
return -1;
if(a < b)
return 1;
return 0;
});
Demo: http://jsfiddle.net/ambiguous/QRmJ4/
fonte
2012-03-02 22:19:52
mi piace il metodo di confronto molto pulito e semplice. Una domanda che ho avuto è stata un modo per avere una sorta di inversione. Quindi più la data è vicina alla data corrente, quelli sarebbero i primi e non gli ultimi come si usa il seguente. comparatore: function (m) { return m.get ('date'). getTime(); } – Chapsterj
Ho appena realizzato che le mie date non sono un oggetto data ma un valore di 201203051400, quindi presumo che questo stia causando il problema. Esiste un modo per gestire il valore di stringa e utilizzare ancora la stessa impostazione oppure sarebbe meglio trasformare il valore in un oggetto data e poi eseguire il metodo comparatore. – Chapsterj
@Chapsterj: se si dispone di oggetti Date, è possibile consultare 'your_date - new Date' o' new Date - your_date' come appropriato. Se le tue date sono stringhe ISO-8601-ish, puoi convertirle in Date nella funzione comparatore o tu (meglio IMHO) convertirle in oggetti Date quando carichi e analizzi i tuoi dati. –