javascript - 替换交叉过滤器数据,恢复维度和组

标签 javascript dc.js crossfilter

我正在使用 dc.js渲染一个漂亮的数据集气泡图。底层 dc.js 是 crossfilter .

我想使用来自服务器的新数据顺利刷新我的图表。 This issue on Github明确表示可以通过以下方式做到这一点:

  1. 从交叉过滤器中删除所有数据
  2. 添加新数据
  3. 调用 dc.redrawAll()

我已经成功了,但是为了删除所有数据,您首先必须清除所有过滤器(因为 crossfilter.remove 只会删除与当前过滤器匹配的记录)。

我想“记住”我的数据之前是如何过滤的,这样我就可以在替换所有数据后再次重建过滤器。我愿意深入了解 crossfilter 代码,但任何指示都会有所帮助。

另外:如果有人知道一种基于唯一键更新交叉过滤器数据的方法,那将是金粉!

最佳答案

这是我最终一起破解的结果。它工作得很好,尽管我确信它效率低得可笑,因为所有维度都必须从头开始创建:

var _xfilter = crossfilter({x:1, y:2},{x:3, y:4}),
    _dimensions = [];

_dimensions.push(_xfilter.dimension(function(d) { return d.x; });

// Unfilters all the given dimensions, removes all data
// from xf and adds newData to xf.
var _xfilter_reset = function(xf, dimensions, newData) {
    var i;
    for (i = 0; i < dimensions.length; i++) {
        // Clear all filters from this dimension.
        // Necessary because xf.remove only removes records
        // matching the current filter.
        dimensions[i].filter(null);
    }
    xf.remove(); // Remove all data from the crossfilter
    xf.add(newData);
    return xf;
}

// Resets the global crossfilter object and reapplies all
// current dc.js chart filters.
var _refresh_data = function(data) {
    var i, j,
        chart, oldFilters,
        allCharts = dc.chartRegistry.list();

    _xfilter = _xfilter_reset(_xfilter, _dimensions, data);     

    // Reset all filters using dc.js
    for (i = 0; i < allCharts.length; i++) {
        chart = allCharts[i];
        oldFilters = chart.filters(); // Get current filters
        chart.filter(null); // Reset all filters on current chart
        for (j = 0; j < oldFilters.length; j++) {
            // Set all the oldFilters back onto the chart
            chart.filter(oldFilters[j]);
        }
    }
    dc.redrawAll();
}

关于javascript - 替换交叉过滤器数据,恢复维度和组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23500546/

相关文章:

javascript - Backbone.js - 按顺序插入新 View 项

javascript - 没有内容的异步等待获取API不会继续执行代码。

javascript - dc.js 折线图按月/年聚合

javascript - 在条形图中的条形顶部显示值

javascript - 如何在 dc.js barChart 中绘制增长率线?

javascript - Bigcommerce 的当前用户方法

javascript - 使用 Javascript 强制移动浏览器缩小

javascript - 在crossfilter dc js中应用除Others之外的多个过滤器

javascript - 如何对表 dc.datatable 中的行进行颜色编码?

javascript - 如何使用 crossfilter 和 dc.js 过滤、分组和绘制数据