Koleksiyonunuz için bir comparator
yöntemi sağlayarak ne elde edebilirsiniz.
Örnek:
ModelCollection = Backbone.Collection.extend({
comparator: function(a, b) {
if (a.get("name") > b.get("name")) return 1;
if (a.get("name") < b.get("name")) return -1;
if (a.get("name") === b.get("name")) return 0;
},
initialize: function() {
this.on('change:name', function() { this.sort() }, this);
}
});
bu örnekte comparator
koleksiyonunuzu neden olacaktır içeride modellerin name
özniteliği tarafından artan sırada sıralanmasını.
Koleksiyonunuzun, models
ürününün özelliklerini değiştirirken otomatikman sıralanmayacağını unutmayın. Varsayılan olarak sıralama, yalnızca yeni modeller oluştururken ve bunları koleksiyona eklerken olur; Ancak comparator
, collection.sort
yöntemi tarafından kullanılacaktır.
Yukarıdaki kod,s ürünündeki koleksiyonları models
ürününün name
özniteliklerine yeniden sıralayan bir olay dinleyicisi ayarlayarak bu avantajdan yararlanır.
CollectionView = Backbone.View.extend({
initialize: function() {
this.collection = new ModelCollection();
this.collection.on('all', function() { this.render() }, this);
},
render: function() {
this.$el.html(this.collection.toJSON());
}
});
it :)
var:
resmini tamamlamak için, biz emin herhangi bir değişiklik üzerinde kılan yeniden yapmak koleksiyonu ile ilişkili
View
uygun bir olay dinleyicisi kurmak
Backbone documentation den
İlgili alıntı: varsayılan olarak
hiçbir yoktur Bir koleksiyon için comparator
. Bir comparator
tanımlarsanız, koleksiyonu sıralanmış düzende tutmak için kullanılır. Bu, modeller eklendikçe, collection.models
'da doğru dizine eklendikleri anlamına gelir. Bir karşılaştırıcı sortBy
(tek bir argümanı alan bir işlevi ilet), sort
(iki argümanı bekleyen bir karşılaştırma işlevini ilet) veya özniteliğin sıralamasını belirten bir dize olarak tanımlanabilir. [...]comparator
numaralı koleksiyonlar, daha sonra model niteliklerini değiştirirseniz, otomatik olarak yeniden sıralanmayacaktır, bu nedenle siparişi etkileyebilecek model niteliklerini değiştirdikten sonra sort
'u aramak isteyebilirsiniz.