Có thể thực hiện logic hơn vào so sánh để bạn có thể trừu tượng đi một số logic sắp xếp:
var Collection = Backbone.Collection.extend({
model: myModel,
order: 'name'
comparator: function(model) {
if (this.order === 'name') {
return model.get('name');
} else {
return model.get('date'); //or modify date into a numeric value
}
}
});
Sau đó, để thay đổi cách bạn muốn nó được sắp xếp:
myCollection.order = 'date';
myCollection.sort();
Điều này sẽ gọi hàm so sánh và sắp xếp theo cách này.
Bạn có thể nghe cho resorting trong một cái nhìn:
this.listenTo(myCollection,'sort',this.render);
này có lợi thế nói thêm rằng mỗi khi một mô hình được thêm vào, nó gọi là so sánh và sắp xếp nó sử dụng bất cứ thiết lập hiện tại của bạn, bởi vì phương pháp sắp xếp được lưu trữ trong bộ sưu tập.
Tôi có thể hỏi lý do bạn không muốn đặt lại bộ sưu tập không? Có trình kích hoạt đặt lại (cho chế độ xem) vì lý do chính xác này. tức là khi sắp xếp của bạn thay đổi thông qua đặt lại thì lượt xem của bạn sẽ hiển thị lại. –
Bạn nói đúng, tôi thấy không có bất lợi trong việc đặt lại toàn bộ bộ sưu tập. Cảm ơn. – chenglou
Việc đặt lại 'bộ sưu tập' là một điều bình thường khi dữ liệu thay đổi, trong trường hợp của bạn là toàn bộ bộ sưu tập, mặc dù đó là cùng một dữ liệu nhưng theo thứ tự khác nhau –