我创建了一个聚合数据表,它使用可点击的行过滤其他表。尝试使用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.使用表中的行或单个表的重置选项进行筛选后重置所有数据。
请帮忙。谢谢