Чарт. Основные настройки#
Для начала создадим отдельную форму ChartForm и добавим ее в меню. В каталоге source/forms сделаем два файла, заберем из предыдущей практики таблицу, для демонстрации заполнения данных.
В ChartForm.xmlвставим код “Создание ChartForm.xml”:
После 1-го Group вставим код элемента управления Chart: (Элемент управления Chart)
В ChartForm.js вставим код “Создание ChartForm.js”
В units.json добавим ссылку на форму (в массив views в существующей группе).
(код “Добавление в units.json”)
Сохраним изменения. Проверим результат:
Добавим в панель управления (ToolBar) кнопку «Вывести», при нажатии на которую в чарте визуализируются данные из таблицы.
Добавьте в ChartForm.xml описание кнопки «Вывести» в ToolBar:
(код “Добавление кнопки «Вывести»”)
Чарт как и прочие элементы управления принимает JS объекты в Observable формате. Так как в таблице они и так уже в этом формате, то просто заполняем чарт данными из грида.
В ChartForm.js добавим реализацию toolBarItemChartShow_clicked'.
(код “Добавление события кнопки «Вывести»”)
Сохраним изменения и проверим результат:
При нажатии на кнопку получим результат:
Группировка данных#
Теперь поменяем группу, пусть теперь это будет MaterialGroup
(код “Смена группировки диаграммы в ChartForm.xml на группировку по MaterialGroup”)
Результат:
Как видим, чарт не имеет собственных механизмов группировки и агрегации значений. То есть надо сперва сделать предобработку данных.
Добавим в класс формы новую функцию, которая будет возвращать сгруппированные данные.
(код “Группировка диаграммы по MaterialGroup в ChartForm.js с помощью функции getGroupedData()”)
Суть ее весьма проста: перебирается массив данных в таблице и заполняется объект, в котором свойство объекта - это значение свойства по которому группируем, а значение - сумма поля Price. Далее выводим результат перебора ключей массива.
И заменим заполнение чарта свойством.
(код “Реализация кнопки «Вывести» с помощью функции getGroupedData()”)
В ChartForm.js поменяем параметры для Series.
(код “Смена группировки диаграммы в ChartForm.xml на настраиваемую пользователем группировку”)
Сохраним изменения и проверим результат:
Сделаем функцию getGroupedData() универсальной. Пусть принимает параметр, по которому надо группировать.
(код “Группировка диаграммы по параметру функции getGroupedData() в ChartForm.js”)
Группировать будем по текущей группировке Grid, если её нет, то по 'MaterialGroup'.
(код “Реализация кнопки «Вывести» с настраиваемой пользователем группировкой”)
Сохраним изменения и проверим результат. Попробуйте поменять группировку и перестроить чарт.
Нет группировки:
по Товару:
по Группе товаров:
Дополнительные параметры#
Добавим вывод значений каждого кусочка нашего пирога. Вынесем настройки в отдельную функцию и вызовем ее в конструкторе.
(код “Реализация функции setChartSettings() с выводом значений по группам”)
(код “Вызов функции setChartSettings() в конструкторе”)
Результат:
Изменим радиус круга:
(код “Реализация функции setChartSettings() с изменением радиуса диаграммы”)
Результат:
Изменим формат выведенного значения, добавив “руб.” в конце. (код “Реализация функции setChartSettings() с добавлением «руб.»”)
Сохраним изменения и проверим результат:
Данная функция применяется для всех надписей на гриде, в том числе и на легенду. Поэтому чтобы “руб” добавлялся только для лейблов, функция:
(код “Реализация функции setChartSettings() с добавлением «руб.» для лейблов”)
Выведем сумму внутри круга (код “Реализация функции setChartSettings() с лейблами внутри круга”)
Сохраним изменения и проверим результат:
События#
Чарт поддерживает событие clicked. Подпишемся на это событие и в реализации сделаем вывод информации о выбранном кусочке пирога.
В ChartForm.xml добавьте в Chart свойство clicked (код “Добавление события для Chart в ChartForm.xml”)
В ChartForm.js добавим реализацию (код “Реализация события при нажатии на сегмент Chart в ChartForm.js, вывод в консоли”)
В результате при нажатии на область круга в консоли браузера выйдет индекс записи в массиве данных. Остается лишь его вывести.
(код “Реализация события при нажатии на сегмент Chart в ChartForm.js, вывод в «Инфо»”)
Из массива достаем свойства Group, Value и выводим их (вызвав как функцию, так как в dataSource объекты в Observable формате).
Результат при нажатии на группу “Фрукты”:














