主干集合提取不会触发重置()
这是我对集合的看法
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() }); });
问题是绑定到reset
的render
函数在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});