Подскажите, пожалуйста, как правильно организовать динамическую загрузку балунов меток, для кластеров, созданных автоматически LoadingObjectManager?
Перерыл несколько десятков примеров и тем здесь и в песочнице. Обсуждения похожие есть, а рабочих примеров именно с LoadingObjectManager нет.
Вот один из вариантов, который я пробовал:
var LOM = new ymaps.LoadingObjectManager('/map.php?cat='+cat+'&bbox=%b',{clusterize: true,clusterHasBalloon:true,geoObjectOpenBalloonOnClick:true}); mmp.geoObjects.add(LOM); var monitor; function hasBalloonData (objectId) { return LOM.objects.getById(objectId).properties.balloonContent; } LOM.objects.events.add('click', function (e) { var objectId = e.get('objectId'); LoadBalloon(objectId); }); LOM.clusters.events.add('balloonopen', function (e) { var target = e.get('target').getOwner(), activeObject = target.state.get('activeObject'); if (monitor) { monitor.removeAll(); } monitor = new ymaps.Monitor(target.state); monitor.add(['activeObject'], changeActiveObject); changeActiveObject({ activeObject: activeObject }); }); function changeActiveObject (data) { var id = data.activeObject.id; if (!hasBalloonData(id)) { LoadBalloon(id); } } function LoadBalloon(id){ if (hasBalloonData(id)) { LOM.objects.balloon.open(id); } else { SetBaloon(id); } } function SetBaloon(id){ var obj = LOM.objects.getById(id); $.ajax({ url: '/map.php?bln='+id }).done(function(data) { obj.properties.balloonContent=data; }); }
Балуны в одиночные метки загружаются нормально. Кластерные балуны сначала открываются, потом в них загружается и не обновляется контент. Показывается он только если щёлкнуть по другой метке, а затем открыть ранее загруженную.
Впрочем, наверное, правильнее загружать содержимое балунов для всех меток кластера. Как это сделать тоже не понятно. Нашел такой рабочий пример: http://jsfiddle.net/rx3LF/1/ однако в нем используется не LoadingObjectManager, а clusterer, и адаптировать его под кластеры LOM не удалось. :(
Вопросы:
1. Как заставить код отображать содержимое балуна сразу после загрузки данных в приведённом выше примере?
2. Как правильно организовать перебор всех меток, входящих в данный кластер LoadingObjectManager чтобы сформировать единый запрос на загрузку данных для этих меток?
LOM.clusters.events.add('click', function (e) { var obj = e.get('target'); var objectId = e.get('objectId'); //Получили нужный кластер и его ID //Как получить массив ID меток кластера? ... });
Спасибо!