Source: gridcontroller.js

/**
 * Родительский "класс" для таблиц
 */
var IrisGridController = IrisController.extend({

  render: function () {},

  events: {},

  /**
   * Отображает итоги внизу таблицы
   * @param {string} [windowId=$(this.el.id)] Id таблицы.
   */
  showTotal: function(windowId) {
    var l_grid;
    if (windowId == undefined) {
      l_grid = $(this.el.id); // получаем грид 
    }
    else {
      l_grid = $(windowId);
    }

    // Обернем строку с итогами в table, чтобы добавить справа под скроллом колонку
    var data = {
      id: l_grid.getAttribute('id'),
      scrollbar_width: g_vars.scrollbar_width,
      items: []
    }
    
    // По всем колонкам таблицы
    for (var i=0; i<l_grid.rows[0].cells.length; i++) {
      // По всем переданным параметром колонкам
      if ($(l_grid.rows[0].cells[i]).hasAttribute('total_value')) {
        data.items.push({
          width: $(l_grid.rows[0].cells[i]).getWidth(),
          total: $(l_grid.rows[0].cells[i]).getAttribute('total_value')
        });
      }
    }
    if (data.items.length == 0) {
      return;
    }

    if ($(l_grid.getAttribute('id')+'_summary')) {
      jQuery('#' + l_grid.getAttribute('id')+'_summary').replaceWith(
          _.template(jQuery('#grid-summary').html(), {data: data}));
    }
    else {
      var parentContainer = l_grid.up('div[conttype="outer"]').up();
      var old_height = $(parentContainer).getHeight();
      var div_outer = l_grid.up('div[conttype="outer"]');
      jQuery('#' + windowId).parents('div[conttype="outer"]').append(_.template(
        jQuery('#grid-summary').html(), {data: data}));
      var new_height = $(parentContainer).getHeight();
      
      //После вставки обновим высоту грида
      var elems_height = 0;
      for (var i=0; i<$(parentContainer).children.length; i++) {
        //try на тот случай, если попадется лишний перевод строки, который зачтется за childnode
        try {
          if ('outer' != parentContainer.children[i].getAttribute('conttype')) { 
            elems_height += $(parentContainer.children[i]).getHeight();
          }
        } 
        catch(e) {}
      }
      //Компенсируем высоту parentContainer, она меняется везде кроме chrome и firefox после добавления строки summary
      elems_height += new_height-old_height;
      div_outer.setAttribute('elems_height', elems_height);
      updateGridHeight(l_grid);
      updateGridWidth(l_grid);
    }
  }

});