【发布时间】:2018-03-17 22:08:52
【问题描述】:
我希望在 URL 中实现存储过滤器,以便轻松共享它们。它适用于行和饼图的简单过滤器,但我正在尝试研究如何从日期范围内的 URL 恢复过滤器。
我已经实现了这里使用的相同代码 -> https://github.com/Edouard-Legoupil/3W-Dashboard/blob/gh-pages/index.html
function showFilters() {
var filterStrings = [];
var charts = dc.chartRegistry.list();
charts.forEach(function (chart) {
chart.filters().forEach(function (filter) {
filterStrings.push(filter);
})
})
d3.select("#filters").text(filterStrings);
}
function getFiltersValues() {
var filters = [
{ name: 'season', value: seasonChart.filters()},
{ name: 'homeaway', value: homeAwayChart.filters()}];
var recursiveEncoded = $.param( filters );
location.hash = recursiveEncoded;
console.log(filters);
}
function initFilters() {
// Get hash values
var parseHash = /^#season=([A-Za-z0-9,_\-\/\s]*)&homeaway=([A-Za-z0-9,_\-\/\s]*)$/;
var parsed = parseHash.exec(decodeURIComponent(location.hash));
function filter(chart, rank) {
if (parsed[rank] == "") {
chart.filter(null);
}
else {
var filterValues = parsed[rank].split(",");
for (var i = 0; i < filterValues.length; i++ ) {
chart.filter(filterValues[i]);
}
}
}
//filter the charts using the filters we've got from the url
if (parsed) {
filter(seasonChart, 1);
filter(homeAwayChart, 2);
}
}
可以在此处找到完整的仪表板以了解其当前的工作方式 - http://www.vitalswansea.com/stats/index2.php
我在这个问题 - storing dc.js filters in URI and restoring them 中注意到 Gordon 编写了类似的代码(如下)来解决这个问题,但我自己难以实现。
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);
}
提前谢谢你。
【问题讨论】:
标签: dc.js