2013-03-24 29 views
18

Bu, bu koleksiyonomurga toplama sıfırlamak patlamaz getirme()

var mssg = mssg || {}; 

mssg.Messages = Backbone.Collection.extend({ 
    model : mssg.Message, 
    url : 'messages' 
}); 

olduğunu

var mssg = mssg || {}; 

mssg.MessagesView = Backbone.View.extend({ 

el: '#messages', 

initialize: function() { 
    this.collection.fetch(); 
    this.collection.bind('reset', this.render, this); 
}, 

render : function() { 
    this.$el.html(''); 
    this.collection.each(function(item) { 
     this.renderMessage(item); 
    }, this); 
    return this; 
}, 

renderMessage : function(item) { 
    var messageView = new mssg.MessageView({ 
     model : item 
    }); 
    this.$el.append(messageView.render().el); 
} 

}); 

bir koleksiyon için benim görünümdür ve bu başlatılır nasıl:

var mssg = mssg || {}; 

$(function() { 
    new mssg.MessagesView({ 
     collection : new mssg.Messages() 
    }); 
}); 

Sorun, ajax getirme isteğinden sonra reset'a bağlı render işlevinin çalışmamasıdır.

add'a bağlarsam çalışır. Bir hata ayıklama işlevine all bağlamayı denedim ve her öğe için sync olayının add ile birlikte çağrıldığını söylüyor. Eğer omurga change log işaretlerseniz

+2

Bu.collection.fetch'i ({reset: true}) deneyebilir misiniz? – nikoshr

+0

@nikoshr bu işe yaradı! Bunun ima edildiğini düşündüm? –

cevap

33

, sen yolu 1.0 değişti ele alınır getirme görürsünüz:

Yeniden adlandırılmış Collection "güncelleme" benzer model.set ile paralellik için, ayarlamak için(), ve sıfırlama ile kontrast. Şimdi getirildikten sonra varsayılan güncelleme mekanizması. Bir sıfırlama olayı tetiklemek için, Yani {reset: true}

geçmesi, "reset" kullanmaya devam etmek isterseniz, şimdi omurga 1.0

this.collection.fetch({reset: true}) 
+0

Harika teşekkürler, yeni bir uygulama. Bu yüzden yeni varsayılana geçtim ('set') –

0

kullanmak zorunda, sıfırlama tetiklemek gerekiyor elle:

youColloection.fetch({reset: true});