有没有办法连接回调过滤器尺寸过滤器发生变化时会发生什么?

时间:2014-03-13 22:14:53

标签: crossfilter dc.js

我有几个用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
})

3 个答案:

答案 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);