2012-04-22 25 views
5

Uygulamamda, arka ucunu dinleyen ve istemciler tarayıcısı tarafından tutulan modellere güncellemeler alan bir socket.io bağlantısına sahibim (modele ulaşan) kimliğine göre ve model niteliğine set numaralı telefonu arayın.backbone.js: Modelleri güncelle, yeniden sırala ve yeniden oluştur modelleri koleksiyonu

Koleksiyonun sıralanmasını, daha sonra tüm modellerin yeni siparişleri yansıtabilmesi için bir bütün olarak yeniden oluşturulmasını istiyorum. set (çoğu örnek yeniden görüntüleniyor gibi görünüyor)). Bunu gerçekleştirmenin bir yolu nedir?

NB Örnek bir todo uygulamasından (bu ilk bel kemiği uygulaması) güzel bir sözdizimini kaldırdı bir backbone.js düzenine sahibim.

cevap

12

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.