Есть задача, на определённом уровне зума карты менять groupByCoordinates у кластера на тру, при возвращении уровней обратно, необходимо востанавливать false
Имеется следующий код.
myMap = new ymaps.Map('map', {
center: [43.580994, 39.726839],
zoom: 12,
behaviors: ["default", "scrollZoom"]
});
myCluster = new ymaps.Clusterer({
clusterBalloonSidebarWidth: 10,
clusterBalloonWidth: 290,
clusterBalloonHeight: 145
});
myMap.events.add('boundschange', function (e) {
if (e.get('oldZoom') != e.get('newZoom')){
if (e.get('newZoom') >= 17){
myCluster.options.set({groupByCoordinates:true});
}else{
myCluster.options.set({gr
oupByCoordinates:false}); }
});
/*Блок заполнения геообжектс пропущен*/
myCluster.add(myGeoObjects);
myMap.geoObjects.add(myCluster);
всё прекрасно работает, но через какое то время после действий с картой, удаление/приблежение , перемещение карты.
Вылетает ошибка, и всё контролы на карте перестают работать. Как и сама карта.
- Uncaught TypeError: Cannot read property 'length' of undefined combine.xml?modules=dZerg
Ld4eJedd7einCoZnDnsntnzgi geh5pkeynAirisiokMgzm6m7l …YdBbacecqcNi1j9bJbndUcCa BdkdlaScBaocKb5j4mNmFj3&j sonp_prefix=ymaps2_0_30:1
- Uncaught TypeError: Cannot call method 'getCurrentState' of null combine.xml?modules=dZerg
Ld4eJedd7einCoZnDnsntnzgi geh5pkeynAirisiokMgzm6m7l …YdBbacecqcNi1j9bJbndUcCa BdkdlaScBaocKb5j4mNmFj3&j sonp_prefix=ymaps2_0_30:1
Подскажите как решить "это", или может какой то другой метод как можно справится с задачей выше.
Опытным путём выяснил, что ломает всё это - myCluster.options.set({groupByCoordinates:true}); , безраницы true или false. И не важно где оно вызвана, но именно оно, по велению рандома вызывает ошибку выше.
myCluster = new ymaps.Clusterer({clusterBalloonSidebarWidth: 10,clusterBalloonWidth: 290,clusterBalloonHeight: 145,groupByCoordinates: false});myClusterGrouped = new ymaps.Clusterer({clusterBalloonSidebarWidth: 10,clusterBalloonWidth: 290,clusterBalloonHeight: 145,groupByCoordinates: true});myMap.events.add('boundschange', function (e) {try{if (e.get('oldZoom') != e.get('newZoom') && (e.originalEvent.type=='statechange')){if (e.get('newZoom') >= 17 && !changed){myCluster.removeAll();myClusterGrouped.add(myGeoObjects);changed = true;}else{myCluster.add(myGeoObjects);myClusterGrouped.removeAll();changed = false;}}}catch (e){}});myCluster.add(myGeoObjects);myMap.geoObjects.add(myCluster);myMap.geoObjects.add(myClusterGrouped);
Вариант с 2умя кластерами, у которых меняются элементы тоже не работает. Те же ошибки.
Получается любые махинации с кластерами ломают карту.