Backbone: membalik urutan model dalam suatu koleksi

Dibuat pada 11 Apr 2011  ·  12Komentar  ·  Sumber: jashkenas/backbone

Hei,

apa cara terbaik untuk membalik urutan urutan koleksi? pembanding saya mengurutkan semua model berdasarkan tanggal,
tetapi saya akan membutuhkannya dalam urutan terbalik. menggunakan toArray() dan reverse() sepertinya cukup jelek.

mengingat saya tidak melewatkan sesuatu yang penting di sini, saya akan memilih atribut model tulang punggung untuk mengatur
mengurutkan bersama dengan pembanding.

Bersulang,
daniel

question

Komentar yang paling membantu

Anda juga bisa melakukannya

collection.set(collection.models.reverse(), {sort: false});

Semua 12 komentar

Cara terbaik untuk membalikkan jenis koleksi adalah dengan mengembalikan nilai negatif dari kriteria perbandingan Anda.

comparator : function(model) {
  return -model.get('date');
}

Bagaimana ini seharusnya bekerja saat mengurutkan menurut abjad pada nilai string?

Jika yang Anda miliki hanyalah nilai string, lalu mungkin mengubahnya menjadi Tanggal sebelumnya?
Saya memiliki masalah yang sama dan ini menyelesaikannya.

comparator : function(model) {
  return -new Date(model.get('date'));
}

Itu hanya berfungsi untuk tanggal (yang diubah menjadi angka saat Anda mengawalnya dengan -), tetapi tidak untuk string arbitrer yang ingin Anda urutkan menurut abjad.

Anda tentu saja benar, saya berasumsi Anda masih berbicara tentang tanggal (seperti OP), tetapi tanggal Anda adalah string yang dapat dikonversi. Kesalahan saya kalau begitu :).

Versi Backbone berikutnya (dan master saat ini) akan mendukung pemesanan sort untuk pembanding (bukan hanya sortBy ), jadi Anda akan dapat mendefinisikannya dengan cara biasa.

comparator: function(a, b) {
  ...
}

Apa yang Anda lakukan jika Anda memiliki beberapa kasus penggunaan untuk koleksi yang sama, beberapa di antaranya harus ditampilkan dalam satu urutan, dan yang lainnya secara terbalik? Implementasi pembanding dan pengurutan Anda hanya dapat memilih satu arah atau yang lain, tampaknya tidak ada Collection.reverse () yang dapat dengan cepat mengganti arah pengurutan (ascending vs descending).

@ elwayman02 Anda hanya dapat mempertahankan 2 contoh pengumpulan (Koleksi # klon dapat membantu)

Itu tidak terlalu berguna ... ambil contoh situasi di mana kumpulan mewakili kisi data yang akan saya sortir berulang kali ke berbagai arah. Tidak masuk akal untuk mencoba dan mempertahankan dua sumber data yang berbeda dan beralih di antara keduanya. Harus ada satu objek data yang kita manipulasi sesuai kebutuhan.

Saya telah menyimpan banyak pembanding pada sebuah koleksi, dan menukarnya sesuai kebutuhan.

var Collection = Backbone.Collection.extend({
  comparators: {
    a: function () {},
    b: function () {}
  },

  setComparator: function (key) {
    this.comparator = this.comparators[key];
    return this;
  }
});
var collection = new Collection();
collection.setComparator('a').sort();
collection.setComparator('b').sort();

Itu solusi yang lebih baik, meskipun saya masih tidak mengerti mengapa solusi itu diperlukan daripada tulang punggung yang hanya mendukung metode reverse ().

Anda juga bisa melakukannya

collection.set(collection.models.reverse(), {sort: false});
Apakah halaman ini membantu?
0 / 5 - 0 peringkat