0

У меня есть backbone.js коллекция и коллекция. коллекция просмотра, слушая его коллекции add событие. Но когда я добавляю новые модели в свою коллекцию, он отображает несколько раз для каждой модели. Пожалуйста, проверьте JSFiddleBackbone.js просмотр коллекции несколько раз для одного триггера

var ImageCollectioView = Backbone.View.extend({ 

    initialize: function() { 
    this.collection.bind('add', this.render, this); 
    }, 

    collection: imgColection, 
    el: '#cont', 
    render: function() { 
    var els = [], self = this; 
    this.collection.each(function(image){ 
     var imageView = new ImageView({model: image}); 
     self.$el.append(imageView.render().el); 
    }); 

    return this; 
    } 
}); 

ответ

2

Ваш метод render делает всю коллекцию. Таким образом, после добавления модели вы должны очистить существующие представления элементов:

render: function() { 
    var els = [], self = this; 
    this.$el.empty(); 
    //------^---- clear existing 
    this.collection.each(function(image){ 
     var imageView = new ImageView({model: image}); 
     self.$el.append(imageView.render().el); 
    }); 

    return this; 
} 

Это, как говорится, лучше добавить отдельный метод, который просто присоединяет единственный вид элемента, а не рендеринг всей коллекции:

var ImageCollectioView = Backbone.View.extend({ 
    initialize: function() { 
    this.render(); 
    this.listenTo(this.collection, 'add', this.renderItem); 
    }, 
    el: '#cont', 
    render: function() { 
    this.collection.each(this.renderItem, this); 
    return this; 
    }, 
    renderItem: function(image) { 
    var imageView = new ImageView({ 
     model: image 
    }); 
    this.$el.append(imageView.el); 
    } 
}); 

Updated Fiddle

+0

Я пропустил это, спасибо, его работа теперь, еще одна помощь делает мой шаблон кодирования позвоночника в порядке или его неправильном? –

+0

@WimalWeerawansa Ваша кодировка в порядке, хотя ее можно улучшить. См. Https://jsfiddle.net/rfzqtyru/10/. Главное, что вы не должны жестко кодировать экземпляры модели/коллекции внутри конструктора представлений. Либо создайте их снаружи, либо передайте их в качестве параметров или создайте их внутри представлений. Другое дело, что вам не нужно вручную инициализировать модели –

+0

Снова Большое вам спасибо за помощь. –