some Underscore methods'un koleksiyonlara birleştirilmesi biraz kusurludur. collection.some_mixed_in_underscore_method()
derken, koleksiyon belgenizin arkasındaki bazı Kılçık şeylerini istemez, böylece koleksiyonun modelleri içindeki özniteliklere Altçizgi yöntemi uygulanır; bir nevi bu gibi çalışır:
console.log(collection.chain());
Eğer chain
olduğunu göreceksiniz: böyle çalışmıyor
var ary = _(this.models).map(function(m) { return m.attributes });
return _(ary).some_mixed_in_underscore_method();
Ama collection.chain()
, chain
sadece bunu doğrudan eğer öyleyse toplanması en models
sarar size bir dizi modeli saran bir nesne veriyor. Modelleriniz bir is_checked
özelliğine sahip olmayacaktır (yani model.is_checked
yoktur), ancak is_checked
özniteliklerine sahip olacaklardır (yani model.get('is_checked')
ve model.attributes.is_checked
olacaktır). her şeyin ters gittiği yere
Şimdi görebilirsiniz:
collection.chain().where({'is_checked':true})
modelleri is_checked
özelliklere sahip değildir. Özellikle, is_checked
'un true
olduğu ve where
'dan sonraki her şeyin boş bir diziyle çalıştığı herhangi bir model olmayacaktır.
Artık işlerin yanlara gittiğini biliyoruz, nasıl düzeltiriz? 'Size cenneti Eğer id
s ile bunları yaratmadı henüz
collection.chain()
.filter(function(m) { return m.get('is_checked') })
.pluck('id')
.value();
Ama id
yok Modellerinizin s ve: Evet, kolayca modeller paketten böylece filter
yerine where
kullanabilirsiniz id
s almak için bir sunucu ile konuştum böylece undefined
s geri bir dizi almak için gidiyoruz. Bazı id
s eklerseniz:
var collection = new App.OptionCollection([
{id: 1, 'is_checked': true},
{id: 2, 'is_checked': true},
{id: 3, 'is_checked': false}
]);
o zaman aradığınız [1,2]
alırsınız.
Demo: http://jsfiddle.net/ambiguous/kRmaD/
Mükemmel açıklama. Teşekkürler! Gerçek ortamımda, koleksiyon sunucudan getirilir, böylece kimlikleri vardır. – Bart
'pluck' o model.get (' çağırmaz çünkü çoğu özellik için aynı sorun var) 'ancak bunun yerine modelin niteliklerini doğrudan görünüyor olacaktır. 'id', nesne üzerinde tanımlanan özel bir özelliktir, bu nedenle çalışır, ancak 'is_checked' gibi diğer özellikler 'undefined' değerini döndürür. – Spig