2012-05-25 7 views
6

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

2

"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.

  1. Sadece add olayı dinlemek ve o _.debounce() fonksiyonu kullanılarak debounced edilmiş bir işleyici kullanarak tek bir etkinliği taklit defalarca
  2. çağrılabilir bekliyoruz: Birkaç seçenek var.
  3. 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 
    }); 
    
+0

Sıfırla olayını çağırmak istemiyorum, çünkü add: true parametresi ile getirmeyi çağırıyorum. –

5

çö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'); 
}}); 
+1

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. –