in js/index.js [159:200]
_processInvalidation() {
const { items, events, listTemplate, model } = this.options;
const { invalidation } = this._state;
const eventsDOM = _.omit(events, LIST_VIEW_EVENTS);
const eventsListView = _.pick(events, LIST_VIEW_EVENTS);
if (invalidation & INVALIDATION_EVENTS) {
this.undelegateEvents();
_.each(this._state.eventsListView || {}, (handler, event) => {
this.off(event, handler);
});
}
if (invalidation & INVALIDATION_LIST) {
const isInternalViewport = _.isString(this._props.viewport);
if (isInternalViewport && this.viewport) {
this.viewport.remove();
this.viewport = null;
}
this.$el.html(listTemplate(model));
if (!this.viewport) {
this._hookUpViewport();
}
this.$topFiller = this.$('.top-filler');
this.$bottomFiller = this.$('.bottom-filler');
this._applyPaddings({
paddingTop: 0,
paddingBottom: this.itemHeights.read(items.length),
});
_.extend(this._state, { indexFirst: 0, indexLast: 0 });
}
if (invalidation & INVALIDATION_EVENTS) {
this.delegateEvents(eventsDOM);
_.each(eventsListView, (handler, event) => {
this.on(event, handler);
});
this._state.eventsListView = eventsListView;
}
const invalidateItems = invalidation & INVALIDATION_ITEMS;
_.extend(this._state, { invalidation: INVALIDATION_NONE });
return invalidateItems;
}