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

时间:2013-03-24 19:44:54

标签: javascript jquery backbone.js underscore.js

这是我对集合的看法

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一起调用每个项目。

2 个答案:

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