【问题标题】:backbone collection fetch doesn't fire reset()主干集合提取不会触发 reset()
【发布时间】:2013-03-24 19:44:54
【问题描述】:

这是我对收藏的看法

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

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

如果我将它绑定到add,它就可以工作。 我尝试将all 绑定到一个调试函数,它说sync 事件与add 一起为每个项目调用。

【问题讨论】:

  • 你能试试 this.collection.fetch({reset: true}) 吗?
  • @nikoshr 谢谢你的工作!我以为这是暗示的吗?

标签: javascript jquery backbone.js underscore.js


【解决方案1】:

如果您检查主干网change log,您会发现在 1.0 中处理 fetch 的方式发生了变化:

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

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

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

【讨论】:

  • 很酷,谢谢,这是一个新应用,所以我只是切换到新的默认设置 (set)
【解决方案2】:

在骨干网 1.0 中,您必须手动触发重置:

youColloection.fetch({reset: true});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多