2011-06-22 18 views
6

Modellerim dolu bir Backbone.Collection var; Bu modelin Car olduğunu varsayalım. Bu koleksiyon Cars'un harika, büyük bir listesi. Listeden seçilen birkaç özel araç kimliğine sahip olmak ve daha sonra bu koleksiyondan sadece seçilen araba nesnelerini alabilmek istiyorum.Backbone.js: Nesne koleksiyonlarını bir dizi model kimliğine göre filtreleyebilir miyim?

Aşağıdaki kod bloğum çalışmıyor; Eminim Backbone.js/Underscore.js ile bunu yapmanın bir yolu var ... Ben de Backbone/Underscore için oldukça yeni.

CarList = Backbone.Collection.extend({ 
    model: Car, 
    filterWithIds: function(ids) { 
     return this.filter(function(aCar) { return _.contains(ids, car.id); } 
    } 
}); 

Herhangi bir işaretçi?

+1

"this.filter" ifadesine iletilen anonim işlev bir iade deyiminde eksik. Diğer bazı dillerin aksine (ör., Ruby) JavaScript, son ifadeyi bir işlevde varsayılan bir dönüş değeri olarak kullanmaz. (Ayrıca, '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'atanması, gereksizdir.' ' –

+0

Haklısınız, Niall… Kodumu Kahvekökümden geçirerek kod çeviriyordum ve bunu bıraktım; ve kodumu sadeleştirirken yanlışlıkla bu gereksiz satırı bıraktım. Kod örneğimi düzelttim. –

cevap

12

Tamam, sanırım anladım. Orijinal kod bloğuma yakın, ancak güncellenen filterWithIds işlevi burada. CoffeeScript (Ben) 'de birlikte takip edenler için

filterWithIds: function(ids) { 
    return _(this.models.filter(function(c) { return _.contains(ids, c.id); })); 
} 

, burada CoffeeScript versiyonu.

filterWithIds: (ids) -> _(@models.filter (c) -> _.contains ids, c.id) 

Bu benim cevabım; herhangi bir kod kokusu?

+2

İçerikleri kullanmak yerine, codscript'in c.id.'ye karşı her kimliği denetlemek için bir for döngüsüne dönüştüğü ids cinsinden c.id koşulunu deneyebilirsiniz. – c3rin

+3

Bu yanıt yayınlandığından, 'include'' içeriğine 'yeniden adlandırıldı. – hughes

+0

Teşekkürler, @hughes. Sabit! –

İlgili konular