bir Model düşünün/Koleksiyon gibi:Backbone.js/underscore.js içinde karşılaştırıcıda çok düzeyli bir sıralama nasıl uygulanır?
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) {
...
}
});
nasıl çok düzeyli sıralama uygulamak için bir karşılaştırıcı yazabilirim? AModel
adlı kullanıcının a
özniteliğini, ardından b
özniteliğini ve c
özniteliğini kullanarak sıralamak istiyorum.
Böyle bir şeye benzeyen bir karşılaştırıcıyı bir araya getirdim ama daha iyi/akıllı bir yol olup olmadığını bilmek istiyorum.
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;
}
Daha sonra, s
doğru boşluklarla takviye olur ve çok düzeyde ile "sözcük" sırada olmalıdır.
collection.sort(key=lambda x: x.get('c'))
collection.sort(key=lambda x: x.get('b'))
collection.sort(key=lambda x: x.get('a'))
daha iyi bir yolu var mı: (yukarıda Python benzer eşdeğerleri vardı nasılsa ise) Ama hepsi Python en istikrarlı çok seviyeli tür güzelliği göre çok brüt hissediyor?
Evet, bu özellik bir hafta önce, omurga 0.9 tanıtıldı. Sürüm geçmişini okumaya değer. – biziclop
Ah, peki ... Benim omurgamı güncellemeliyim (0.5.3'teyim) ... – dlamotte
Bu yeni yöntemi kullanarak someones uygulamasını görmek güzel olurdu. – dlamotte