Клуб API Карт

Не срабатывает событие balloonclose при кластеризации объектов (объединение в кластеры)

Tootoo.ya
18 ноября 2014, 18:07

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

Передо мной стояла задача, менять картинку маркера в зависимости от того, открыт у него балун или закрыт. Объекты кластеризуются.

Я создал кластеризатор объетов 

clusterer

 

, добавил в него массив с маркерами и повесил события (они срабатывают только если объект - маркер) открытие балуна

// Открытие балуна
    clusterer.events.add('balloonopen', function(e) {
            var target = e.get('target');
            if (typeof target.getGeoObjects == 'undefined') {
                preIconImage = target.options.get('iconImageHref');;
                target.options.set('iconImageHref', './assets/templates/frontend/markers/marker06.png');
            }
        });

 и закрытие балуна

// Закрытие балуна
    clusterer.events.add('balloonclose', function(e) {
            var target = e.get('target');
            if (typeof target.getGeoObjects == 'undefined') {
                target.options.set('iconImageHref', preIconImage);
                console.log('balloonclose')
            }
        });

 Ничто не предвещало беды, пока не начал менять масштаб карты с открытым балуном. При объединение объектов в кластер, балун пропадает, а событие balloonclose не срабатывает. Тоже самое происходит при нажатии на кластер.

Существует ли альтернативный способ отловить событие balloonclose?

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

Какую версию апи вы используете? 2.1.17?

Спасибо за сообщение, починим баг в ближайшем релизе. Пока могу посоветовать workaround - в событии balloonopen подписывайтесь на событие mapchange геообъекта с балуном, оно сработает, когда метка будет удалена с карты.

Спасибо, будем ждать)

Решил эту проблему костылем.

Проверяю существование балуна в DOM при каждом изменении карты

 

map.events.add('boundschange', function () {

            checkBaloon();

        });

если он пропал, то меняю картинку маркера

 

function checkBaloon() {

    if ($('div.baloonContainer').length === 0) {

        marker.options.set('iconImageHref', preIconImageOpen);

    }

}

 

Этот способ работает, но должно работать событие balloonclose , которое не срабатывает!