Подскажите, пожалуйста, как правильно организовать динамическую загрузку балунов меток, для кластеров, созданных автоматически 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 меток кластера?
...
});Спасибо!