这是我对集合的看法
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 );
}
});
这是集合
var mssg = mssg || {};
mssg.Messages = Backbone.Collection.extend({
model : mssg.Message,
url : 'messages'
});
这就是它的初始化方式:
var mssg = mssg || {};
$(function() {
new mssg.MessagesView({
collection : new mssg.Messages()
});
});
问题是绑定到render
的{{1}}函数在ajax获取请求后不会触发。
如果我将它绑定到reset
则可行。
我尝试将add
绑定到调试函数,并说明all
事件与sync
一起调用每个项目。
答案 0 :(得分:33)
如果您检查主干change log,您会看到fetch的处理方式在1.0中发生了变化:
重命名Collection的“更新”以设置,与类似的并行 model.set(),与reset对比。它现在是默认更新 获取后的机制。如果您想继续使用“重置”,请通过
{reset: true}
因此,要触发重置事件,您现在必须使用
this.collection.fetch({reset: true})
答案 1 :(得分:0)
在主干1.0中,你必须手动触发重置:
youColloection.fetch({reset: true});