Обновление данных dc.js и повторное использование исходных фильтров

Я пытаюсь создать воспроизводимый пример этого вопроса о том, как заменить данные перекрестного фильтра, восстанавливающие размеры и группы - то есть повторно использовать любые фильтры, созданные пользователем до данные обновляются. Здесь мой удар по реализации принятого ответа. Здесь рабочий jsfiddle.

script обновляется через 3 секунды, чтобы переключиться с data1 на data2. Если вы применяете фильтр до этого времени (например, нажмите Mr A), фильтр будет "запоминаться", когда графики будут обновляться по мере того, как будет выделен правый элемент (другие выделены серым цветом). Но фильтр не применяется к другим графикам. Вам нужно удалить фильтр и повторно использовать его для работы (например, удалить сегмент сегмента 2013).

Что-то не так с моей реализацией или с самим решением?

<title>dc.js - Example</title>
1 ответ

Вот ваш пример: http://jsfiddle.net/pm12xf3z/

Было исправлено несколько проблем, но самое главное, не перестраивайте свой Crossfilter, ваши измерения или ваши группы. В этом нет необходимости. Существующие размеры и группы будут обновляться новыми данными.

Просто удалите старые данные из вашего Crossfilter (ndx.remove() без фильтров на месте), затем добавьте новые данные (ndx.add(data2)), а затем сообщите, что dc.js обновляется (dc.redrawAll()). Это все, что вам нужно сделать для вашего Crossfilter.

Тогда возникает вопрос, как удалить все фильтры и сохранить фильтры dc.js в этом процессе? Ключ должен взаимодействовать с вашими диаграммами dc.js, а не с вашими измерениями напрямую. Для ваших ординарных графиков выбора вы можете сделать следующее:

function resetData(ndx, dimensions) {
 var yearChartFilters = yearRingChart.filters();
 var spenderChartFilters = spenderRowChart.filters();
 yearRingChart.filter(null);
 spenderRowChart.filter(null);
 ndx.remove();
 yearRingChart.filter([yearChartFilters]);
 spenderRowChart.filter([spenderChartFilters]);
}

То есть, возьмите фильтры из диаграмм, установите фильтры на диаграммах на null, выполните удаление данных Crossfilter, а затем добавьте фильтры обратно в диаграммы. Точный формат фильтра отвратителен, и тот факт, что вы должны поместить вывод .filters() в массив, чтобы заставить его работать с .filter(), немного странно, но в dc.js ситуация становится все лучше 2.0 бета.

licensed under cc by-sa 3.0 with attribution.