Подтвердить что ты не робот

Выбор извлечения основной цепи не срабатывает reset()

Это мой взгляд на коллекцию

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, привязанная к reset, не запускается после запроса выборки ajax.

Если я привяжу его к add, он будет работать. Я попробовал привязать all к функции debuggin, и он говорит, что событие sync вызывается рядом с add для каждого элемента.

4b9b3361

Ответ 1

Если вы проверите backbone журнал изменений, вы увидите, что обработка fetch обрабатывается в 1.0:

Переименованная коллекция "обновление" для установки для parallelism с аналогичным model.set() и контраст с reset. Теперь это обновление по умолчанию механизм после извлечения. Если вы хотите продолжить использование "reset", пройдите {reset: true}

Итак, чтобы вызвать событие reset, теперь вам нужно использовать

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

Ответ 2

в backbone 1.0, вам нужно запустить reset вручную:

youColloection.fetch({reset: true});