dc.js Вид по умолчанию для таблицы строк отсортирован и не переупорядочивается при нажатии

1

У меня есть ситуация, когда отображается таблица из двух строк рядом. Мне нужно добиться сортировки графика с максимальным значением группы, чего я могу достичь через chart.order(). Сценарий: -

1. The initial load of the chart with sorted values.
2. on Click of the chart, Don't need the sorting or reordering of the bar. 
Filter can apply the chart without reordering the bar position

Есть ли доступное решение?

jsFiddle

Теги:
d3.js
dc.js
crossfilter

1 ответ

1
Лучший ответ

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

Мы помещаем это в функцию многократного использования, которая создает обработчик событий для события postRender:

function save_first_order() {
    var original_value = {}; // 1
    return function(chart) {
        chart.group().all().forEach(function(kv) { // 2
            original_value[kv.key] = kv.value;
        });
        chart.ordering(function(kv) { // 3
            return -original_value[kv.key];
        });
    };
}

Событие postRender запускается только после первого рендеринга графика (рисования). Эта функция

  1. сохраняет свою собственную карту значений в закрытии: на карту будет влиять только карта, к которой она применяется
  2. когда рендер происходит, он сохраняет все значения из текущей 'group.all() в этой карте и
  3. изменяет функцию упорядочения, чтобы использовать значения на карте вместо текущих значений

Это предполагает, конечно, что новые значения не появляются позже, но я думаю, что подразумеваемое предположение в вашем вопросе.

Я положил его внутри функции, чтобы ее можно было повторно использовать, и применил ее к обеим диаграммам следующим образом:

rowChart
  // ...
    .on('postRender', save_first_order());

(Обратите внимание, что для создания замыкания вызывается функция многократного использования, и она возвращает функцию, которая является фактическим обработчиком событий.)

Изображение 174551

Вилка вашей скрипки: http://jsfiddle.net/gordonwoodhull/04fcvgvu/5/

  • 0
    Большое спасибо ... это действительно ценится. Это работа, как шарм.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню