我有几个用dc.js构建的图表。我可以通过将回调附加到每个dc.js图表的.on(“filterted”,function(chart){})来实现所需的功能,但这很烦人,因为我必须将相同的回调附加到每个图表。并且容易出错,因为在添加新图表时,有人必须记住附加事件处理程序。我更愿意只是附加一个回调到底层的crossfilter。这可能吗?
有没有办法优化这个...
var ndx = crossfilter(data);
var dimAlpha = ndx.dimension(function(d) {return d.alpha});
var dimBeta = ndx.dimension(function(d) {return d.beta});
var groupAlpha = dimAlpha.group().reduceSum(function(d) {return 1;});
var groupBeta = dimBeta.group().reduceSum(function(d) {return 1;});
dc.pieChart(myDomId1)
.dimension(dimAlpha)
.group(groupAlpha)
.on("filtered", function(chart) {
//do stuff
});
dc.pieChart(myDomId2)
.dimension(dimBeta)
.group(groupBeta)
.on("filtered", function(chart) {
//do stuff
});
这样的事情......
var ndx = crossfilter(data);
var dimAlpha = ndx.dimension(function(d) {return d.alpha});
var dimBeta = ndx.dimension(function(d) {return d.beta});
var groupAlpha = dimAlpha.group().reduceSum(function(d) {return 1;});
var groupBeta = dimBeta.group().reduceSum(function(d) {return 1;});
dc.pieChart(myDomId1)
.dimension(dimAlpha)
.group(groupAlpha);
dc.pieChart(myDomId2)
.dimension(dimBeta)
.group(groupBeta);
ndx.on("filtered", function() {
//do stuff
})
答案 0 :(得分:3)
如果缺少一种全局附加回调的方法,那么你可以做的一件事就是减少重复代码的风险,就是定义一次回调函数并传入一个引用,而不是在每个图表上内联定义它。 / p>
function my_func() {
// do stuff
}
dc.pieChart(myDomId2)
.dimension(dimBeta)
.group(groupBeta)
.on("filtered", my_func);
答案 1 :(得分:3)
如果你有一百万个图表并且不想手动将事件监听器附加到每个图表,你可以遍历图表注册表并以这种方式添加它们。例如:
/config
请注意,此代码必须在图表实例化后才能运行。
答案 2 :(得分:0)
图表和过滤器也可以传递给过滤函数,如:
function my_func(chart,filter) {
// do stuff
}
dc.pieChart(myDomId2)
.dimension(dimBeta)
.group(groupBeta)
.on("filtered", my_func);