Не будет отображаться без collection.on, в замешательстве

Я работаю над проектом Backbone.js, и меня смущает вопрос о collection.on или так называемой привязке.

Вот немного кода из моего представления.

initialize: function(){
        this.accCollection = this.options.accCollection;
        //Nothing shows without this line, which renders 3 times
        this.accCollection.on('all', this.render, this); 
        this.accCollection.fetch({
            success:function(){
                this.render;  
            }
        });
    },

    render: function(){
        $('.currentPage').html("<h3>Accounts</h3>");
        console.log(this.accCollection.models);
        //Render it in jade template  
        this.$el.html(this.template({accCollection:this.accCollection.models}));
        return this;
    }

Поэтому я не понимаю, почему без этой строки не получится. Это работает, если я использую "все" и "добавить". Это что-то с моей выборкой, которая заставляет его не рендерить пустые данные в первый раз, а со второго на третье он работает, потому что он был заполнен тогда? Смущенный!

this.accCollection.on('all', this.render, this); 

Скажите, если мне нужно предоставить больше информации, и я отредактирую вопрос!

/С уважением

1 ответ

Решение

Пара вещей:

  1. По мнению, вы должны this.listenTo (пример ниже): это гарантирует, что события будут отменены, когда представление будет уничтожено.
  2. Вы success обратный вызов не разделяет контекст представления. this в вашем обратном вызове относится к options объект, который вы передаете, а не вид или даже коллекция.

Что вы, вероятно, хотите сделать, это:

initialize: function(){
    this.accCollection = this.options.accCollection;
    this.listenTo(this.accCollection, 'reset', this.render, this); 
    // Setting reset to true will trigger the reset event
    this.accCollection.fetch({ reset: true });
}
Другие вопросы по тегам