2015-07-11 5 views
1

Я бы хотел избежать повторного рендеринга на каждом событии 'add remove reset' на Backbone.Collection.Магистраль - избегайте повторной рендеринга на каждом удалении

Так в Backbone.View я мог бы:

this.listenTo(this.collection,'remove',this.render); 

если удалить/удалить кучу моделей, это будет оказывать столько моделей, как я удаляю.

Каков наилучший способ избежать этого?

+1

Один из способов избежать этого - запустить обычное событие, когда все модели были удалены, и прослушать это пользовательское событие вместо того, чтобы слушать ваниль «удалить». –

+0

Итак, как бы вы удалили несколько моделей? Есть ли где-то коллекция, которую вы очищаете? – kevin628

+1

Вы уже ответили сами от того, что мы видим здесь. Если вы хотите больше, вам нужно быть конкретным. – Deryck

ответ

3

У вас нет повторной визуализации всего представления только потому, что что-то нужно уйти.

Вы могли бы иметь метод для удаления ломтя всего в один модели представления:

model_removed: function(m) { 
    // find m's chunk of the view inside this.$el 
    // and remove it. 
    this.$('whatever-selector-you-need').remove(); 
} 

, а затем связать это с 'remove' события:

this.listenTo(this.collection, 'remove', this.model_removed); 

Демо: https://jsfiddle.net/ambiguous/fL0zr67s/

В качестве альтернативы , вы можете вложить свои представления так, чтобы у вас был один под-просмотр для каждой модели и общий вид коллекции. Представление коллекции создало и визуализировало представления модели по мере необходимости, а затем просто вызовет remove на подзадаче в ответ на событие 'remove' из коллекции.