2014-01-04 3 views
2
var Home = Backbone.View.extend({ 
template: _.template($('#home-template').html()), 

initialize: function (params) { 
    this.collection = new BlogList(); 

    this.listenTo(this.collection, "add", this.renderBlog); 
    this.listenTo(this.collection, "reset", this.render); 
}, 

render: function() { 
    this.$el.html(this.template({hasPrevious: this.collection.hasPrevious()})); 

    this.collection.each(function(item) { 
     this.renderBlog(item); 
    }, this); 

    return this; 
}, 

renderBlog: function(item) { 
    this.$('#blog-list-container').append((new BlogPreView({ model: item })).render().el); 
}, 

BlogPreView является Backbone.View Новый BlogPreView инстанциируется много раз. Нужно ли мне удалять старые.Должен ли я удалить неиспользуемые представления на Backbone.js

Как удалить backbone.view и как удалить этот конкретный пример?

ответ

1

Вы должны позвонить по номеру remove, чтобы удалить их. Это удалит el из DOM и вызовет stopListening, чтобы отменить любые сделанные вами звонки listenTo. Если есть другие вещи для очистки, то вы должны переопределить remove, чтобы очистить эти «другие вещи», а затем позвонить по стандартному remove.

В вашем случае, у вас есть вид на ребенка, так что вы должны следить за ними:

renderBlog: function(item) { 
    var v = new BlogPreView({ model: item }); 
    this.previews.push(v); // Initialize this in `initialize` of course. 
    this.$('#blog-list-container').append(v.render().el); 
} 

, а затем очистить их перед повторной визуализации или удаления:

removePreviews: function() { 
    _(this.previews).invoke('remove'); 
    this.previews = [ ]; 
}, 
render: function() { 
    this.removePreviews(); 
    // what you have now goes here... 
}, 
remove: function() { 
    this.removePreviews(); 
    return Backbone.View.prototype.remove.apply(this); 
} 

Вы часто можете получить прочь без звонка remove, но как только вы обнаружите, что вам это нужно, это может быть огромная проблема, чтобы доработать ваш код до remove. Но если вы все время звоните remove, правильно следите за просмотрами и переопределяете remove по мере необходимости, тогда вы не сможете застрять, сделав неприятную модификацию позже.

Смежные вопросы