_processInvalidation()

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;
  }