2013-06-10 21 views
6

Hedef: Koleksiyonumdan geçen ve modelin name özniteliğine karşı kullanıcı sorgusuyla eşleşmeye çalışan bir büyük/küçük harf duyarsız arama oluşturmaya çalışıyorum. Şu anda belirli bir model bulmak istiyorsam, arama sorgusu tam olmalıdır.Harita, Backbone koleksiyonunda nasıl çalışır?

Omurgada değil, o kadar basit bir şey yapmanın kolay bir yolu yok gibi görünüyor. map işlevi akla geldi. Koleksiyonun tamamından geçebilir ve modelin ad niteliğini küçük harfe dönüştürdüysem, kullanıcı sorgusunu küçük harfe de çevirebilirim ve voila!

Ancak sorun, Backbone Collection ve map işlevinin nasıl kullanılacağı hakkında hiçbir fikrim yok. Backbone belgelerinde map belgesinde, üç sayıdan oluşan bir dizi kullanarak süper ilkel bir örnek kodla belgelerin alt çizgilerine götüren bir bağlantı dışında hiçbir belge yoktur.

Bu işe yaramıyor ... neden?

this.collection.map(function(model) { 
    return model.get('name').toLowerCase(); 
}); 

cevap

8

Aslında, tüm alt çizgiların toplama yöntemleri Backbone.Collection nesnelerinde proxy edilmiştir. Bir collection.map(... yaptığınızda, eşlenen işlev tarafından döndürülen bir dizi nesne döndürür. Raina77ow tarafından sunulan çözüm bir Backbone.Collection bir dizi değildir ve this.collection haritanın sonucunu tahsis beri koleksiyonunu kendisi yok edemez.

Bir koleksiyona filtre uygulamak isterseniz, filter yöntemini kullanmanızı tavsiye ederim. .

var filter = this.$('#search-field').val(), 
    filteredModels = this.collection.filter(function(model) { 
    return model.get('name').toLowerCase() === filter; 
}; 
this.collection.reset(filteredModels); 

Not koleksiyonları alt çizgi en proxy yöntemlerden herhangi modellerin bir dizi döndürür sonra bunları kullanmak istiyorsanız, bu modelleri ile koleksiyonunu sıfırlayabilirsiniz o ya: (Sana Backbone.View bir çalışan olduğunu varsayıyorum Eşdeğer olarak koleksiyonun model özniteliğini filtrelenmiş sonuçlara ayarlayın: this.collection.models = filteredModels İlk form, dinleyebildiğiniz ve örneğin görünümünüzü yeniden oluşturabileceğiniz bir reset olayını tetikleme avantajına sahiptir.