代码之家  ›  专栏  ›  技术社区  ›  Yash Nigam

跟踪DC js聚合数据表中的过滤器,这些数据表用于使用可单击行进行向下搜索

  •  1
  • Yash Nigam  · 技术社区  · 8 年前

    我创建了一个聚合数据表,它使用可点击的行过滤其他表。尝试使用DC创建向下搜索功能。js聚合了表,并且能够组合出一个有效的解决方案,这要感谢Gordon在这里提出的关于堆栈溢出的解决方案。然而,目前我还不知道如何跟踪表中所有单击的行键,以便用户可以撤消任何已选择的过滤器。

    已启用行单击筛选的聚合数据表的代码。

    //Fake Dimension
    rank = function (p) { return "" };
    
    var filterKeys = [];
    
    //Remove any table row that has 0 or a garbage value
    function checkRows(d){
        if(d.value.total<=0 || isNaN(d.value.total)||isNaN(d.value.average) ||d.value.average<=0 ||isNaN(d.value.count)||d.value.count<=0 ){
          return 0;
        }
        return d;
      }
    
    //MarketTable
    marketTable.width(500)
        .height(480)
        .dimension(AECMarketsGroup)
        .group(rank)
        .columns([function (d) { d=checkRows(d);
                                while(d!=0){
                                  return d.key;
                                 }
                               },
                  function (d) { d=checkRows(d);
                                while(d!=0){
                                  return                  
                              formatter(d.value.total);
                                } 
                               },
                  function (d) { 
                    d=checkRows(d);
                    while(d!=0){
                      return formatter(d.value.count);
                    }
                  },
                  function (d) {
                    d=checkRows(d);
                    while(d!=0){
                      return d.value.average;
                    } 
                  }])
        .sortBy(function (d) { return d.value.total })
        .order(d3.descending)
    
      //Enable click filtering
      marketTable.on('pretransition', function (table) {
        table.selectAll('td.dc-table-column')
          .on('click',function(d){           
          if(filterKeys.indexOf(d.key)===-1)
            filterKeys.push(d.key);
          else
            filterKeys = filterKeys.filter(k => k != d.key);
          if(filterKeys.length === 0)
            marketDim.filter(null);
          else 
            marketDim.filterFunction(function(d) {
              return filterKeys.indexOf(d) !== -1;
            })
          dc.redrawAll();
        })
      });
    

    以下是js摆弄所有3张桌子: https://jsfiddle.net/yashnigam/kvt9xnbs/21/

    例如,如果用户在第一个表中单击Europe,在第二个表中单击Amazon,在第三个表中单击Electronics,我想显示用户在向下搜索中所走路径的面包屑,在本例中为Europe>>亚马逊>>并且能够禁用任何应用的过滤器,比如我禁用亚马逊,那么过滤器选择应该是欧洲>>电子学

    我面临的另一个问题是我使用dc实现的“全部重置”按钮。过滤;华盛顿。renderAll;在我跨表进行选择后不会重置数据。

          <h6 class="dc-data-count" style="float: left;margin-left:5px;">                     
                        <span>
                            <span class="filter-count"></span>
                             selected out of 
                            <span class="total-count"></span>
                             records |  
                           <a  id="reset" 
             href="javascript:dc.filterAll();dc.renderAll();"> Reset All</a>
                       </span>
    
            </h6>
    

    如果你能帮我解决我面临的两个问题中的任何一个,那将是非常有帮助的 1.跟踪过滤器并能够禁用它们 2.使用表中的行或单个表的重置选项进行筛选后重置所有数据。

    请帮忙。谢谢

    0 回复  |  直到 8 年前