2016-03-07 76 views
1

我正在使用treetables,並且實現了自定義數據過濾器。我只想在第一級數據層次結構中進行一些操作。你知道我怎麼做到的?Webix:custom footer 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文檔說,我只是需要把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){} 
};