Сумма значений ng-grid в совокупной строке

У меня есть ng-сетка с тремя столбцами (имя, значение, машина), в которой отображаются показатели (имя, значение) с трех разных компьютеров (как указано в столбце машины). Вместо того, чтобы отображать три строки для каждой метрики, я установил groups: ['name'] в gridOptions; однако я не могу понять, как заставить сводную строку отображать сумму значений. Есть ли способ получить доступ к значениям строк в каждой группе для вычисления суммы?

Это то, что я хочу видеть (7, 10, 4, 6 в совокупных строках в столбце значений):

  NAME           VALUE     MACHINE
v metric1 (3)    7
  metric1        3         comp-a
  metric1        2         comp-b
  metric1        2         comp-c
> metric2 (3)    10
> metric3 (3)    4
v metric4 (3)    6
  metric4        5         comp-a
  metric4        0         comp-b
  metric5        1         comp-c

Спасибо за вашу помощь!


person Kabb5    schedule 26.08.2013    source источник
comment
Я считаю, что это сильно зависит от версии используемой вами сетки. Я нашел несколько решений в Интернете для этой же проблемы, но функции и внутренняя модель данных сетки изменились между найденными мной записями и текущей версией, я опубликую свое текущее решение ниже, но вам, возможно, придется копаться в коде сетки a немного, чтобы найти шаблон в вашей версии, а затем просто настроить/проверить оттуда.   -  person shaunhusain    schedule 26.08.2013
comment
Я использую ng-grid версии 2.0.5.   -  person Kabb5    schedule 26.08.2013
comment
Честно говоря, только что понял, что я не уверен, на каком из них я нахожусь в данный момент, просто у меня есть отметка времени, чтобы уйти ... Я все равно опубликую то, что я сделал.   -  person shaunhusain    schedule 27.08.2013
comment
Удалось ли вам получить агрегацию в своих столбцах значений, как в примере выше? Это то, чего я хотел бы добиться в ng-grid в своем проекте.   -  person gugguson    schedule 16.11.2013


Ответы (1)


Я столкнулся с этой же проблемой и попробовал некоторые предложенные решения, которые я нашел, но не работал с той версией сетки, которая у меня есть. Я просмотрел источник сетки и нашел шаблон, который мой использовал для агрегированных строк, и скопировал его, а затем настроил, чтобы включить вызов функции в моем методе для частей дисплея:

В моих gridOptions я определяю свойство, показанное ниже

aggregateTemplate: "<div ng-click=\"row.toggleExpand()\" ng-style=\"rowStyle(row)\" class=\"ngAggregate\">" +
    "    <span class=\"ngAggregateText\"><span class='ngAggregateTextLeading'>{{row.totalChildren()}} {{row.label CUSTOM_FILTERS}} {{entryMaybePlural(row)}}</span><span>Total Weight: {{aggFunc(row)}} lbs {{AggItemsLabel}}</span></span>" +
    "    <div class=\"{{row.aggClass()}}\"></div>" +
    "</div>" +
    ""

В области контроллера для сетки у меня есть функции

  $scope.aggFunc = function (row) {
    var total = 0;
    angular.forEach(row.children, function(cropEntry) {
      total+=cropEntry.entity.weight;
    });
    return total.toString();
  };
  $scope.entryMaybePlural = function (row) {
    if(row.children.length>1)
    {
      return "entries";
    }
    else
      return "entry";
  };

Вы увидите, что в обоих случаях я передаю строку в шаблоне функции в области действия контроллера, затем я смотрю на свойство, называемое дочерними элементами в строке (я только что понял это с помощью инструментов отладки Chrome, когда другие попытки не помогли упражняться).

PS в моей сетке этот комментарий компиляции находится вверху, но без версии :|

/***********************************************
* ng-grid JavaScript Library
* Authors: https://github.com/angular-ui/ng-grid/blob/master/README.md 
* License: MIT (http://www.opensource.org/licenses/mit-license.php)
* Compiled At: 06/03/2013 21:19
***********************************************/
person shaunhusain    schedule 26.08.2013