update: function()

in js/layout/table.js [185:240]


    update: function (model) {
      _.each(this.renderers, function (renderer) {
        renderer.update && renderer.update();
      });

      var value = model.get('value');
      var columns = model.get('columns');
      var columnsDelta = {};
      var colOptions = this.options.columns || {};
      var orderby = {};

      _.each(this.grid.projection.get('orderby'), function (element, index) {
        var key = _.first(_.keys(element));
        orderby[key] = {
          dir: element[key],
          index: index,
        };
      });

      _.each(columns, function (col, property) {
      // TODO [akamel] consider filtering which props to copy/override
        var delta = {};
        var colOption = colOptions[property];
        var orderName = property;

        if (colOption && _.isString(colOption.sortable)) {
          orderName = colOption.sortable;
        } else if (col && _.isString(col.sortable)) {
          orderName = col.sortable;
        }

        if (orderby[orderName]) {
          delta.$orderby = orderby[orderName];
        }

        columnsDelta[property] = _.defaults(delta, colOption, col);
      });

      if (_.has(this.options.$metadata, 'class') && _.isArray(this.options.$metadata.class)) {
        this.options.$metadata.class = this.options.$metadata.class.join(' ');
      }

      var delta = {
        'value': value,
        'columns': columnsDelta,
        'columns.lookup': _.indexBy(columns, function (col) {
          return col.property;
        }),
        '$metadata': this.options.$metadata,
        'hideHeaders': this.options.hideHeaders,
      };

      this.data = _.defaults(delta, model.toJSON());

      this.draw({ canSkipDraw: false });
    },