Phương pháp hiện tại tôi đang sử dụng là để lọc một bộ sưu tập, mà trả về một mảng, và sử dụngBackbone.js: cách lọc đúng bộ sưu tập?
collection.reset(array)
tái cư nó. Tuy nhiên, điều này sửa đổi bộ sưu tập ban đầu, vì vậy tôi đã thêm một mảng được gọi là "originalCollectionArray" theo dõi trạng thái mảng ban đầu của bộ sưu tập. Khi không có lọc đang hoạt động Tôi chỉ cần sử dụng
collection.reset(originalCollectionArray)
Nhưng sau đó, tôi cần phải theo dõi thêm và loại bỏ các mô hình từ bộ sưu tập sản, vì vậy tôi đã làm điều này:
// inside collection
initialize: function(params){
this.originalCollectionArray = params;
this.on('add', this.addInOriginal, this);
this.on('remove', this.removeInOriginal, this);
},
addInOriginal: function(model){
this.originalCollectionArray.push(model.attributes);
},
removeInOriginal: function(model){
this.originalTasks = _(this.originalTasks).reject(function(val){
return val.id == model.get('id');
});
},
filterBy: function(params){
this.reset(this.originalCollectionArray, {silent: true});
var filteredColl = this.filter(function(item){
// filter code...
});
this.reset(filteredColl);
}
này nhanh chóng trở thành rườm rà khi tôi cố gắng thực hiện các thủ thuật khác liên quan đến thao tác thu thập, chẳng hạn như sắp xếp. Và thẳng thắn, mã của tôi trông hơi khó hiểu. Có một cách thanh lịch để làm điều này?
Cảm ơn
Có bất cứ lý do bạn không chỉ sử dụng 'lấy ({thêm: true}) 'thay vì đặt lại? Có vẻ như đây là những gì bạn đang cố gắng đạt được. Tôi không chắc chắn chức năng 'filter' của bạn đang làm gì, nhưng bạn luôn có thể truyền' {data: {...}} 'để tìm nạp. – bvulaj
Nếu tôi hiểu chính xác, bạn muốn tôi xóa originalCollectionArray và các sự kiện của nó hoàn toàn và tìm nạp dữ liệu gốc mỗi khi tôi lọc/sắp xếp (sắp xếp thực thi trên dữ liệu đã lọc, vì vậy mỗi loại cũng cần tìm nạp và lọc)? Vấn đề là, bộ lọc được kích hoạt khi người dùng nhập vào. Tôi nghĩ rằng nó sẽ lãng phí quá nhiều tài nguyên. Tôi chỉ nói về mặt giả thuyết. – chenglou