Hãy tưởng tượng một mẫu/Bộ sưu tập như:Làm cách nào để triển khai phân loại nhiều cấp trong trình so sánh trong Backbone.js/underscore.js?
var AModel = Backbone.Model.extend({
defaults: {
a: 'a string',
b: 'another string',
c: 'yet another string'
}
});
var ACollection = Backbone.Collection.extend({
model: AModel,
comparator: function(amodel) {
...
}
});
Làm sao tôi viết một so sánh để thực hiện một loại đa cấp không? Tôi muốn sắp xếp theo thuộc tính a
của , sau đó bằng thuộc tính b
và sau đó thuộc tính c
.
Tôi đã hack cùng một bộ so sánh trông giống như thế này, nhưng tôi muốn biết liệu có cách nào tốt hơn/thông minh hơn không?
comparator: function(amodel) {
var s = '',
assumed_max_length_of_any_attribute = 30;
s += amodel.get('a');
while (s.length < assumed_max_length_of_any_attribute) {
s += ' ';
}
s += amodel.get('b');
while (s.length < assumed_max_length_of_any_attribute) {
s += ' ';
}
s += amodel.get('c');
while (s.length < assumed_max_length_of_any_attribute) {
s += ' ';
}
return s;
}
Sau đó, s
trở nên được đệm đúng chỗ và phải theo thứ tự "lexical" với nhiều cấp độ. Nhưng tất cả đều cảm thấy rất thô so với vẻ đẹp của ổn định đa cấp loại trăn (nếu bằng cách nào đó đã ở trên tương đương tương tự trong python):
collection.sort(key=lambda x: x.get('c'))
collection.sort(key=lambda x: x.get('b'))
collection.sort(key=lambda x: x.get('a'))
Có cách nào tốt hơn?
Vâng, tính năng này đã được giới thiệu trong xương sống 0,9, một tuần trước đây. Nó đáng đọc lịch sử phiên bản. – biziclop
Ah, well ... Tôi đoán tôi nên cập nhật xương sống của tôi (Tôi đang ở trên 0.5.3) ... – dlamotte
Sẽ là tốt để xem ai đó thực hiện cho nó bằng cách sử dụng phương pháp mới này quá mặc dù – dlamotte