主干集合提取不会触发重置()

这是我对集合的看法

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 ); } }); 

这是collections品

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

这就是它的初始化方式:

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

问题是绑定到resetrender函数在ajax获取请求后不会触发。

如果我绑定它add它的工作原理。 我尝试将all绑定到一个调试函数,它说sync事件与每个项目的add一起被调用。

如果检查主干更改日志 ,您将看到在1.0中更改了fetch的处理方式:

重命名Collection的“更新”以设置,与类似的model.set()并行,并与reset对比。 它现在是获取后的默认更新机制。 如果您想继续使用“重置”,请通过{reset: true}

因此,要触发重置事件,您现在必须使用

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

在主干1.0中,你必须手动触发重置:

 youColloection.fetch({reset: true});