dc.js permalink or href to share the visualisation filter state?

后端 未结 1 1249
孤独总比滥情好
孤独总比滥情好 2020-12-30 15:24

I am working on a dataviz with dc.js (http://edouard-legoupil.github.io/3W-Dashboard/)

The main limitation is that when users find a specific fact while they explor

相关标签:
1条回答
  • 2020-12-30 15:43

    Here are the key methods that you will want to use:

    • dc.chartRegistry.list(): retrieves an array of all charts that dc has loaded
    • chart.filters(): retrieves an array of all filters for a given chart
    • chart.filter(): applies a filter to a given chart
    • dc.redrawAll(): redraws all charts after applying external filters

    From there it's just a matter of serializing and deserializing the objects.

    Here is one way to do that by stringifying a JSON object:

    var filters = [];
    for (var i = 0; i < dc.chartRegistry.list().length; i++) {
        var chart = dc.chartRegistry.list()[i];
        for (var j = 0; j < chart.filters().length; j++){
            filters.push({ChartID: chart.chartID(), Filter: chart.filters()[j]});  
        }
    }
    var urlParam =  encodeURIComponent(JSON.stringify(filters));
    

    Here is the reverse process of parsing the JSON string and applying the filters:

    var urlParam = ""; //have user input string somehow
    var filterObjects = JSON.parse(decodeURIComponent(urlParam));
    for (var i = 0; i< filterObjects.length; i++)
    {
        dc.chartRegistry.list()[filterObjects[i].ChartID-1].filter(filterObjects[i].Filter);
    }
    dc.redrawAll();
    

    Connecting the two steps will depend on your scenario. You could perhaps save the string to the database or append it as a url param.

    This code might be missing some edge cases, but it seems to work for the basic dc.js examples.

    0 讨论(0)
提交回复
热议问题