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

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

问题描述

在这里,我从每个图表中选择了3个过滤器1,并在url param中粘贴了编码的网址。但是当我按解码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 fiddle链接

推荐答案

对于一般情况是正确的,但是由于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天全站免登陆