2016-03-07 8 views
1

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

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

enter image description here

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

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

<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 ложного, чтобы избежать перегрузок фильтра данных, но он не работает, когда я получил новые данные через AJAX загрузку.

+0

Кто-то может мне помочь? – rjsandim

ответ

0

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

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){} 
}; 
Смежные вопросы