有没有一种方法可以附加回调,以便在交叉过滤器维度过滤器发生更改时触发? [英] Is there a way to attach callback what fires whenever a crossfilter dimension filter changes?

查看:43
本文介绍了有没有一种方法可以附加回调,以便在交叉过滤器维度过滤器发生更改时触发?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有几个使用dc.js构建的图表。我可以通过在每个dc.js图表​​的.on( filterted,function(chart){})上附加回调来实现所需的功能,但这很烦人,因为我必须在每个图表上附加相同的回调。容易出错,因为在添加新图表时,必须记住要附加事件处理程序。我宁愿只是将回调附加到基础交叉过滤器。可能吗?

I have several charts built with dc.js. I can achieve the desired functionality by attaching a callback to each dc.js chart's .on("filterted", function(chart) {}) but this is annoying because I have to attach the same callback to each chart. And error prone because as new charts are added, someone has to remember to attach an event hander. I would prefer to just attach a callback to the underlying crossfilter. Is that possible?

有没有一种方法可以对此进行优化...

Is there a way to optimize this...

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
  });

变成类似这样的东西...

into something like this...

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
})


推荐答案

如果您有一百万个图表,并且不想将事件侦听器手动附加到每个图表上,则可以遍历图表注册表并以这种方式添加它们。例如:

If you've got a million charts and don't want to have to attach the event listener to each one manually, you could iterate through the chart registry and add them that way. Ex:

dc.chartRegistry.list().forEach(function(chart) {
    chart.on('filtered', function() {
        // your event listener code goes here.
    });
});

请注意,此代码必须在图表实例化后生效。

Note that this code must go after the charts have instantiated to work.

这篇关于有没有一种方法可以附加回调,以便在交叉过滤器维度过滤器发生更改时触发?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆