Belgeye göre burada: http://documentcloud.github.com/backbone/#FAQ-events koleksiyonu, sunucuyla koleksiyonu senkronize etmek için bir şey yaptığımda eşitleme olayına neden oluyor. Koleksiyonda getirme yöntemini çağırmaya çalışıyorum ve senkronizasyon etkinliğini beklemeyi deniyorum, ancak asla gerçekleşmeyecek. Etkinlik ekle, ancak koleksiyondaki tüm öğeleri senkronize ettikten sonra ilgili görünümü güncellemek için yalnızca bir etkinliğe ihtiyacım var. Bu olayı tetiklemenin başka bir yolu var mı?Koleksiyondaki Backbone.js eşitleme olayı
cevap
"Eşitleme" olayının yalnızca bir modeli değiştirdiğinizde tetiklendiğine inanıyorum. Dolayısıyla, bir modeli oluşturursanız, günceller veya silerseniz, "senkronizasyon" etkinliği tetiklenir.
Sizin durumunuzda, koleksiyondaki "sıfırlama" olayını dinlemek istediğinizi düşünüyorum.
Düzenleme: {add:true}
seçeneğini ayarlıyorsanız, tüm modeller eklendikten sonra tetiklenecek tek bir Backbone olayı yoktur.
- Sadece
add
olayı dinlemek ve o_.debounce()
fonksiyonu kullanılarak debounced edilmiş bir işleyici kullanarak tek bir etkinliği taklit defalarca - çağrılabilir bekliyoruz: Birkaç seçenek var.
fetch()
'dan dönüş değeri, jQuery XMLHttpRequest nesnesidir. jQuery Deferred arabirimini uygular. Böylece bu işi dinleyebilirsin. Örneğin:myCollection.fetch({add:true}).done(function(){ myView.render(); //or whatever });
çözüm yöntemi almak için parametre olarak geçirilen 'başarı' geri arama maunually senkronizasyon olayı yangın etmektir.
this.collection.fetch({add: true, success: function(collection, response){
collection.trigger('sync');
}});
Omurgadan dolayı 0.9.9 senkronizasyon tetikleme eklendiğinde başarıya geri dönüş artık gerekli değildir. Backbone.sync içindeki http://backbonejs.org/#changelog Consolidated "senkronizasyon" ve "hata" olaylarından. Şimdi başarı veya hata geri çağrılarının varlığından bağımsız olarak tetiklenirler. –
Sıfırla olayını çağırmak istemiyorum, çünkü add: true parametresi ile getirmeyi çağırıyorum. –