2012-08-08 33 views
5

Tôi có danh sách việc cần làm với tên và ngày tháng. Tôi muốn có thể sắp xếp danh sách bằng cách sử dụng tiêu đề hoặc cho đến ngày. Làm thế nào tôi sẽ làm điều này? Công cụ so sánh chỉ cho phép một loại phân loại.Bộ sưu tập Backbone.js có nhiều loại

Cảm ơn.

+1

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. –

+0

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

+0

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 –

Trả lời

1

Tôi nghĩ rằng tôi tìm thấy một phương pháp:

collection.reset(collection.sortBy(function(item){ 
    return item.get(sortingFIeld); 
})) 

đâu SortBy trả về một, sắp xếp mảng mới được thông qua như là đối số để thiết lập lại. SortingField là thuộc tính chuỗi của mô hình.

+0

Ông đặc biệt nói rằng ông không muốn sử dụng lại. Và bây giờ anh ấy đã chỉnh sửa điều đó: P Không phải lỗi của bạn. –

+1

Tôi là tôi mặc dù lol. Tôi đã chỉnh sửa điều đó vì hiện tại đó là giải pháp mà tôi có thể nghĩ đến. – chenglou

+0

Bạn có thể mở rộng câu trả lời của mình không? Tôi đang đối phó với cùng một điều và tự hỏi nơi bạn xác định thuộc tính (tiêu đề hoặc ngày) để sắp xếp theo. – CamelBlues

3

Bạn có thể cần phải nhìn vào the answer here, đây là giải pháp cung cấp trong bài viết rằng:

comparator: function(item) { 
    return [item.get("level"), item.get("title")] 
} 
4

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.

+0

+1 cho câu trả lời này. Các tùy chọn là cách bạn truyền thông tin giữa ứng dụng của bạn mà các chức năng cần. – Throttlehead

Các vấn đề liên quan