Клуб API Карт

Ajax загрузка данных в балун при кластеризации меток с параметром clusterDisableClickZoom:true

Пост в архиве.

Есть список меток с пустым контентом балуна,

myPlacemark[i] = new ymaps.GeoObject({
geometry: {
type: "Point",
coordinates: [...]
},
properties: {
clusterCaption: param.name,
balloonContentBody: ''
}
});


метки залиты в кластер,

var myClusterer = new ymaps.Clusterer({clusterDisableClickZoom: true});
myClusterer.add(myPlacemark);

Чтобы отследить открытие балуна на метке
myPlacemark[i].events.add( ['balloonopen'], function( e ){/*загружаем в балун контен из ajax */})

Этот метод работает только с теми метками, которые не находятся в кластерах.

А как добавить event при открытии балуна кластера И выбора метки из списка геообъектов кластера в этом балуне
myClusterer.events.add( ['balloonopen'], function( e ){}) - определяет только отклытие балуна кластера, но не загрузка/переключение между геообъектами в этом кластере

2 комментария
Всеволод Шмыров
27 января 2016, 23:47
Доброе утро!
Чтобы отслеживать изменение активного геообъекта в кластере, нужно следить за изменением поля "activeObject" состояния геообъекта.
http://api.yandex.ru/maps/doc/jsapi/2.1-dev/ref/reference/ClusterPlacemark.xml#state
Это можно сделать при помощи класса Monitor
http://api.yandex.ru/maps/doc/jsapi/2.1-dev/ref/reference/Monitor.xml
var monitor = new ymaps.Monitor(this.clusterPlacemark.state);
Всеволод Шмыров
27 января 2016, 23:47
Как-то так
    var activeObjectMonitor;
   
    clusterer.events
        .add('balloonopen', function (event) {
            debugger;
           activeObjectMonitor = new ymaps.Monitor(event.get('cluster').state);
           activeObjectMonitor.add('activeObject', function (newValue, oldValue) {
               debugger;
           });
        })
        .remove('balloonclose', function (event) {
            activeObjectMonitor.removeAll();
        });
http://jsfiddle.net/u972e2nf/6/