如何使用 .remove Filter Handler 禁用气泡图上的过滤器?
How can I disable filters on bubbleChart using .removeFilterHandler?
我需要抑制当用户单击 bubbleChart 中的圆圈时发生的过滤,但如果可能,请保留 'selected' 和 'deselected' 的 class 分配。如果不可能,我想用我自己的脚本替换默认的点击行为。
根据 API 文档,我可以在 bubbleChart 上使用 .removeFilterHandler 或 .resetFilterHandler,因为图表类型依赖于 baseMixin。
https://github.com/dc-js/dc.js/blob/master/web/docs/api-latest.md#dc.baseMixin+removeFilterHandler
但它不起作用。当我单击 bubbleChart 中的圆圈时,同一仪表板中的直方图会过滤。我希望这会停止。谁能看到我做错了什么?我正在使用 DC.js v2.0.2。谢谢
var rfh = bubbleChart.resetFilterHandler();
bubbleChart.width(738)
.height(315)
.margins({left:40,right:30,top:15,bottom:30})
.dimension(idDimBubble)
.group(idGrpBubble)
.clipPadding(10)
.renderLabel(false)
.keyAccessor(function (p) { return p.value[selectArrays[0][1]] / p.value.name.length; })
.valueAccessor(function (p) { return p.value[selectArrays[0][0]] / p.value.name.length; })
.radiusValueAccessor(function (p) { return p.value['revenue']+1; })
.title(function(d){
var tempIndex = filters[0].indexOf(window.gran);
var tempString = filters[1][tempIndex]+': ' + d.value.what;
var str = '';
if (window.gran!='company') {
str = 'Avg ';
}
tempString += '\n'+str+selectArrays[1][0]+': '+d3.format('.3s')(Math.round(d.value[selectArrays[0][0]] / d.value.name.length));
tempString += '\n'+str+selectArrays[1][1]+': '+d3.format('.3s')(Math.round(d.value[selectArrays[0][1]] / d.value.name.length));
return tempString;
})
.minRadius(3)
.maxBubbleRelativeSize(0.005)
.x(d3.scale.linear().domain([0, selectArrays[3][1]]))
.y(d3.scale.linear().domain([0, selectArrays[3][0]]))
.r(d3.scale.linear().domain([0, 5000]))
.renderHorizontalGridLines(true)
.renderVerticalGridLines(true)
.removeFilterHandler(function (filters, filter) {
console.log(filters);//doesn't output anything
for (var i = 0; i < filters.length; i++) {
if (filters[i] <= filter && filters[i] >= filter) {
filters.splice(i, 1);
break;
}
}
return filters;
});
这里有几个函数的名称不明确。
removeFilterHandler
本身不会删除过滤器;当用户操作导致删除过滤器时调用它。它只是在应用之前更改列表。
您想要做的是保留过滤器的添加和删除方式,但更改(禁用)它们应用于维度的方式。
这就是 filterHandler
的用途。 Similar name, different functionality. 也许应该叫 applyFiltersHandler
。或者什么的。
您可以将其实现为传递:
chart.filterHandler(function (dimension, filters) {
return filters;
});
它保留过滤器列表,但不会以这种方式将它们应用到维度。
我需要抑制当用户单击 bubbleChart 中的圆圈时发生的过滤,但如果可能,请保留 'selected' 和 'deselected' 的 class 分配。如果不可能,我想用我自己的脚本替换默认的点击行为。
根据 API 文档,我可以在 bubbleChart 上使用 .removeFilterHandler 或 .resetFilterHandler,因为图表类型依赖于 baseMixin。
https://github.com/dc-js/dc.js/blob/master/web/docs/api-latest.md#dc.baseMixin+removeFilterHandler
但它不起作用。当我单击 bubbleChart 中的圆圈时,同一仪表板中的直方图会过滤。我希望这会停止。谁能看到我做错了什么?我正在使用 DC.js v2.0.2。谢谢
var rfh = bubbleChart.resetFilterHandler();
bubbleChart.width(738)
.height(315)
.margins({left:40,right:30,top:15,bottom:30})
.dimension(idDimBubble)
.group(idGrpBubble)
.clipPadding(10)
.renderLabel(false)
.keyAccessor(function (p) { return p.value[selectArrays[0][1]] / p.value.name.length; })
.valueAccessor(function (p) { return p.value[selectArrays[0][0]] / p.value.name.length; })
.radiusValueAccessor(function (p) { return p.value['revenue']+1; })
.title(function(d){
var tempIndex = filters[0].indexOf(window.gran);
var tempString = filters[1][tempIndex]+': ' + d.value.what;
var str = '';
if (window.gran!='company') {
str = 'Avg ';
}
tempString += '\n'+str+selectArrays[1][0]+': '+d3.format('.3s')(Math.round(d.value[selectArrays[0][0]] / d.value.name.length));
tempString += '\n'+str+selectArrays[1][1]+': '+d3.format('.3s')(Math.round(d.value[selectArrays[0][1]] / d.value.name.length));
return tempString;
})
.minRadius(3)
.maxBubbleRelativeSize(0.005)
.x(d3.scale.linear().domain([0, selectArrays[3][1]]))
.y(d3.scale.linear().domain([0, selectArrays[3][0]]))
.r(d3.scale.linear().domain([0, 5000]))
.renderHorizontalGridLines(true)
.renderVerticalGridLines(true)
.removeFilterHandler(function (filters, filter) {
console.log(filters);//doesn't output anything
for (var i = 0; i < filters.length; i++) {
if (filters[i] <= filter && filters[i] >= filter) {
filters.splice(i, 1);
break;
}
}
return filters;
});
这里有几个函数的名称不明确。
removeFilterHandler
本身不会删除过滤器;当用户操作导致删除过滤器时调用它。它只是在应用之前更改列表。
您想要做的是保留过滤器的添加和删除方式,但更改(禁用)它们应用于维度的方式。
这就是 filterHandler
的用途。 Similar name, different functionality. 也许应该叫 applyFiltersHandler
。或者什么的。
您可以将其实现为传递:
chart.filterHandler(function (dimension, filters) {
return filters;
});
它保留过滤器列表,但不会以这种方式将它们应用到维度。