Клуб API Карт

Кластеризатор рушится при приближении или отдалении карты

dolcettegirl
9 ноября 2012, 22:07

Здравствуйте.

Вывожу на карту кластер из 115 объектов, многие из которых находятся рядом (все объекты в Москве).

Изначально всё выводится правильно, но при изменении масштаба все объекты пропадают с карты, при этом в веб-инспекторе появляется одна из двух ошибок:

Uncaught TypeError: Cannot read property 'size' of undefined
Uncaught TypeError: Cannot call method 'destroy' of undefined


… в combine.xml. Но код сжат в одну строку, и я даже не понимаю, где ошибка.

Замечено, что появление ошибки зависит от gridSize. Чем это значение меньше, тем позже возникнет ошибка.

Страница с непорядком находится здесь: expobank ru/about/offices-and-atms/moscow/

Проблемная карта показывается по ссылке «показать карту» под фильтром.

Адрес скрипта: expobank ru/bitrix/templates/expo/js/office-atm-filter.js

Что я неправильно делаю?

2 комментария
Подписаться на комментарии к посту

используйте параметр mode для загрузки необфусцированной версии АПИ

Спасибо. Само по себе это не дало ответа, но методы, в которых проявлялись сбои, навели на мысль, где искать ошибку.

В итоге оказалось, что неправильно были заданы свои иконки для кластеров.

Этот вопрос на мой взгляд слабо освещён в документации, вот как получилось:

    var atmClusterIcons = [{
        href: 'atmCluster.png',
        size: [54, 54],
        offset: [-27, -27]
    }]

Таким образом задаётся объект, описывающий единственную необходимую иконку для кластера. Точнее, массив из одного объекта.

    var atmClusterer = new ymaps.Clusterer({
        clusterDisableClickZoom: true,
        clusterIcons: atmClusterIcons,
        clusterNumbers: [],
        clusterIconContentLayout: oaIconContentLayout
    })

А таким образом создан кластер.

clusterNumbers: [] нужно указывать, если иконка единственная. У меня это значение не  задавалось вовсе, а по умолчанию оно [10,100]. Иконок при таком значении должно быть три. Иконок должно быть на одну больше, чем чисел в этом массиве. У меня же она была единственная, и при попытке обратиться ко второй или третьей скрипт падал.