1

私はツリーテーブルを使用しており、カスタム データフィルターを実装しました。データ階層の最初のレベルで何らかの操作を行いたいだけです。どうすればそれを作ることができるか知っていますか?

いくつかのコンテキストを示します。下の gif では、クリックして内部レベルのデータを開くと、合計 (または平均) が変化します。高レベルでこの情報が計算されるのは、1 回だけ間違っています。

ここに画像の説明を入力

条件を付ける必要があるだけです。それは最初のレベルで何かを作ることです。

これが私の現在のコードです。

<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 の読み込みによって新しいデータを取得すると機能しません。

4

1 に答える 1

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){}
};
于 2016-03-11T15:44:35.460 に答える