Webix: настраиваемый фильтр данных нижнего колонтитула

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

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

введите здесь описание изображения

Мне просто нужно поставить условие, это первый уровень сделать что-то.

Вот мой текущий код.

<script>
webix.ui.datafilter.reports = {
   refresh: function(master, node, column){
      trackCells:false,
      refresh: function(master, node, column){
         var result = 0;
         var tipoDeDados = null;

         master.mapCells(null, column.columnId, null, 1, function(value){

            if (tipoDeDados === null) {
               tipoDeDados = defineTipoDeDados(value);
            }

            valorLimpo = removeCaracteresInvalidos(value);

            result += valorLimpo; // here I think that I need the condition
            return value;
         });

         if (tipoDeDados === "porcentagem") {
            node.firstChild.innerHTML = (result/master.count()).toFixed(2).replace('.', ',') + '%';
         } else if (tipoDeDados === "moeda") {
            node.firstChild.innerHTML = 'R$ ' + (result).toFixed(2).replace('.', ',');
         } else if (tipoDeDados === "numerico") {
            node.firstChild.innerHTML = result;
         } else {
            node.firstChild.innerHTML = "";
         }
      },
      render: function(a, b){}
   };
</script>

Webix Docs говорит, что мне просто нужно поставить trackCells false, чтобы избежать перезагрузки фильтра данных, но он не работает, когда я получаю новые данные через загрузку ajax.


person rjsandim    schedule 07.03.2016    source источник


Ответы (1)


С кодом ниже я получил результаты, которые хотел.

webix.ui.datafilter.reports = {
   trackCells:false,
   refresh: function(master, node, value){
      var result = 0;
      var numberCellsAtFirstLevel = 0;
      var tipoDeDados = null;

      master.data.each(function(obj) {

         currentValue = obj[value.columnId];

         if (tipoDeDados === null) {
            tipoDeDados = defineTipoDeDados(currentValue);
         }

         valorLimpo = removeCaracteresInvalidos(currentValue);

         if (obj.$level == 1) {
            result += valorLimpo;
            numberCellsAtFirstLevel += 1
         }

         return currentValue;
      });

      if (tipoDeDados === "porcentagem") {
         node.firstChild.innerHTML = (result/numberCellsAtFirstLevel).toFixed(2).replace('.', ',') + '%';
      } else if (tipoDeDados === "moeda") {
         node.firstChild.innerHTML = 'R$ ' + (result).toFixed(2).replace('.', ',');
      } else if (tipoDeDados === "numerico") {
         node.firstChild.innerHTML = result;
      } else {
         node.firstChild.innerHTML = "";
      }
   },
   render: function(a, b){}
};
person rjsandim    schedule 11.03.2016