Bạn có thể đạt được những gì bạn muốn bằng cách cung cấp phương thức comparator
cho bộ sưu tập của bạn.
Ví dụ:
ModelCollection = Backbone.Collection.extend({
comparator: function(a, b) {
if (a.get("name") > b.get("name")) return 1;
if (a.get("name") < b.get("name")) return -1;
if (a.get("name") === b.get("name")) return 0;
},
initialize: function() {
this.on('change:name', function() { this.sort() }, this);
}
});
Các comparator
trong ví dụ này sẽ gây ra bộ sưu tập của bạn được sắp xếp theo thứ tự tăng dần của các name
thuộc tính của các mô hình bên trong.
Lưu ý rằng bộ sưu tập của bạn sẽ không được sắp xếp tự động khi thay đổi (các) thuộc tính của bất kỳ số nào trong số models
của nó. Theo mặc định, việc sắp xếp chỉ xảy ra khi tạo các mô hình mới và thêm chúng vào bộ sưu tập; nhưng comparator
sẽ được sử dụng theo phương pháp collection.sort
.
Đoạn mã trên tận dụng điều này bằng cách đặt trình xử lý sự kiện chỉ cần sắp xếp lại bộ sưu tập trên bất kỳ change
s thành thuộc tính models
.
Để hoàn thành bức tranh, chúng tôi thiết lập một event listener thích hợp trong View
kết hợp với bộ sưu tập để chắc chắn rằng nó lại làm cho trên bất kỳ thay đổi:
CollectionView = Backbone.View.extend({
initialize: function() {
this.collection = new ModelCollection();
this.collection.on('all', function() { this.render() }, this);
},
render: function() {
this.$el.html(this.collection.toJSON());
}
});
Vậy là xong :)
Đoạn trích có liên quan từ Backbone documentation:
Theo mặc định, không có comparator
cho bộ sưu tập. Nếu bạn xác định comparator
, nó sẽ được sử dụng để duy trì bộ sưu tập theo thứ tự được sắp xếp. Điều này có nghĩa là khi các mô hình được thêm vào, chúng được chèn vào chỉ mục chính xác trong collection.models
. Bộ so sánh có thể được định nghĩa là sortBy
(chuyển một hàm lấy một đối số), dưới dạng sort
(chuyển một hàm so sánh dự kiến hai đối số) hoặc dưới dạng một chuỗi cho biết thuộc tính sắp xếp theo. [...] Bộ sưu tập với comparator
sẽ không tự động sắp xếp lại nếu sau này bạn thay đổi thuộc tính mô hình, vì vậy bạn có thể gọi sort
sau khi thay đổi các thuộc tính mô hình sẽ ảnh hưởng đến đơn đặt hàng.