在 URI 中存储 dc.js 过滤器并恢复它们 [英] storing dc.js filters in URI and restoring them

查看:21
本文介绍了在 URI 中存储 dc.js 过滤器并恢复它们的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在这里,我从每个图表中选择了 3 个过滤器 1,并将该编码的 url 粘贴到 url 参数中.但是当我按下解码 url 按钮时,它只重绘中间图表过滤器而不是剩余一次..我该怎么办?谢谢

Here i selected 3 filters 1 from each chart and pasted that encoded url in url param. but when i press decode url button it is redrawing only middle chart filters but not the remaining once.. what should i do? thanks

function encodeFunction()
{
    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));
    alert(urlParam);
}
function decodeFunction()
{
    //encoded url here
    var urlParam="%5B%7B%22ChartID%22%3A1%2C%22Filter%22%3A2012%7D%2C%7B%22ChartID%22%3A2%2C%22Filter%22%3A%5B1.0454545454545454%2C4.045454545454545%5D%7D%2C%7B%22ChartID%22%3A3%2C%22Filter%22%3A%22Mr%20B%22%7D%5D ";

    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.renderAll();

    dc.redrawAll();
}

这是小提琴:js 小提琴链接

推荐答案

看起来你的代码在一般情况下是正确的,但是由于 dc.js 处理过滤器的方式有些奇怪,你不能只是恢复来自其序列化形式的范围过滤器.

It looks like your code is correct for the general case, but due to some quirks in the way that dc.js handles filters, you can't just restore a range filter from its serialized form.

我能够通过为数组添加一个特例来让它工作:

I was able to get it working by adding a special case for arrays:

   for (var i = 0; i< filterObjects.length; i++)
   {
       var filter = filterObjects[i].Filter;
       if(filter instanceof Array) filter = dc.filters.RangedFilter(filter[0], filter[1]);
       dc.chartRegistry.list()[filterObjects[i].ChartID-1].filter(filter);
   }

这是我的小提琴叉:http://jsfiddle.net/gordonwoodhull/4dv93aht/10/

我认为不需要这种特殊情况,所以我在这里开了一个问题:https://github.com/dc-js/dc.js/issues/819

I don't think such special cases should be needed, so I opened an issue here: https://github.com/dc-js/dc.js/issues/819

这篇关于在 URI 中存储 dc.js 过滤器并恢复它们的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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