npm i
npm start
При каждом запуске тестовые данные генерируются заново случайным образом.
Достаточно очевидная ошибка, обнаружил сразу, как только перешел из index.js
в map.js
— отсутствовал экспорт функции initMap
.
Согласно документации, в таком случае карта не будет отображаться (фактически карта нулевого размера просто невидна). Именно так и было. Обнаружил после инспектирования DOM дерева - у карты была нулевая высота. Исправил, установив значения ширины и высоты для #map
.
Просмотрел код и не нашел никакой связки между objectManager
и экземпляром карты myMap
- единственная связь, это их создание через методы объекта ymaps
.
В песочнице с примерами для Яндекс Карт, обратил внимание на способ создания objectManager’а, добавление к нему геообъектов, а после добавление менеджера на карту.
После вызова метода add
коллекции геообъектов карты, станции отобразились на карте.
Обратил внимание на расположение объектов отличное от условий задания ("... карта Москвы").
Предположил, что очевидной допущенной ошибкой здесь могли быть либо неверная с математической точки зрения генерация координат, либо их координаты местами поменяли. Если одно из двух не окажется верным, то придется искать что-то еще.
Проверил какие данные возвращаются при запросе по /api/stations
- в массиве объектов геокоординаты возвращались, к сожалению, корректные.
Решил проверить второй вариант следующим образом: если координаты центра карты (Москва) поменять местами, получится (приблизительно) место, где сейчас отображаются станции дронов.
Воспользовался инструментом Яндекса с координатами метки - приблизительно совпало.
Значит объекты располагались где нужно, только широта и долгота местами поменялись. Нашел место установки: при маппинге массива данных с FeatureCollection
- поменял координаты местами, станции переехали в Москву.
В песочнице Яндекса был пример для создания кластера в виде круговой диаграммы. Код в приложении соответствовал примеру.
Обратил внимание, что ниже происходит добавление опции preset
для кластера, несмотря на то, что у него уже была установлена иконка в виде pieChart.
Предположил, что опция preset
переопределяет отображение для кластера. Предположение оказалось верным.
В стрелочной функции ключевое слово this
ссылается на undefined
, так как this
соответствует this'у лексического контекста объявления функции и, следовательно, ссылка такая же, как и вне объектного литерала, а это undefined
(не window
, ведь в модулях по умолчанию используется strict
режим).
Ошибку обнаружил, воспользовавшись методом проб и ошибок:
-
Проверил, появляется ли балун без кастомного layout'а - сработало.
-
Вернул кастомный layout, но в функции
getDetailsContentLayout
удалил все, кроме кода с разметкой (т.е. удалил второй аргумент) - снова сработало. -
Вернул второй аргумент с функциями
build
иclear
балун снова не появлялся.
После внимательного инспектирования кода details.js
заметил использование в во втором аргументе функции createClass
использование arrow functions вместо варианта ES6 method definition (или обычного function expression). Предложил, что есть проблема с контекстом в результате использования стрелочных функций в объектном литерале.
Проверил код с помощью Chrome Dev Tools, дополнив webpack-конфиг свойством devtool: source-map
.
Ключевое слово this
в функциях build
и clear
давало undefined. Из-за стрелочных функций контекст исполнения не верный. Заменил на вариант с методами.
Балун начал открываться в штатном режиме.
В графике нагрузки отображались только точки в 0 у дефектных станций. Заметил, что на графике ось ординат отображается в диапазоне от -1.0 до 0.
Проверил, какие данные генерируются в качестве точек для графика - от 2 до 8, а также ноль. Данные в порядке, следовательно, проблема с графиком.
Значит, необходимо найти место установки диапазона значений для осей и указать его в ручную (или установить какой-нибудь адаптирующийся вариант).
В chart.js
, в chart.options.scales
обнаружил указанное константное значение y.max: 0
. Очевидно, что верхняя граница для оси Y - не то, что требуется в графике нагрузки.
Файл popup.js никуда не импортировался, также в нем использовалось свойство obj.drones
, которое не содержалось в возвращаемых по API данных.
Также не были нигде описаны классы, встречающиеся в разметке функции getPopupContent
.
Выполнил поиск в проекте по слову "getPopupContent" и по drones
. Совпадений не было — удалил неиспользуемый файл.
Не консистентный JS код был исправлен при помощи eslint (Airbnb config).
CSS код приведен к единому стилю с помощью stylelint (standard cofig + stylelint-order plugin).
git (git-bash)
- версионирование кода и публикация в репозиторийssh
- управление удаленным серверомnode-forever
- для запуска приложения в постоянном режиме на удаленном сервереPostman
- проверка работоспособности API бэкенд-заглушкиChrome Dev Tools
- отладка ошибок в коде
-
"Exploring ES6" by Alex Rauschmayer (главы, посвященные arrow function, async programming, OOP) - потрясающая книга. К тому же, она выступает не плохим справочником (не какой-нибудь The Definitive Guide, но все же)
-
"You don't know JS" by Kyle Simpson (1 и 2 книги из серии)