Здравствуйте. Столкнулся с проблемой. На карте имеется несколько тысяч точек, добавленных при помощи objectManager. Включена кластеризация. При клике на точку выполняется AJAX-запрос данных, после чего загруженные данные добавляются к геообъекту
objectManager.objects.events.add('balloonopen', function(e) { var objectId = e.get('objectId'); var hasBalloonData = function(objectId) { return objectManager.objects.getById(objectId).properties.loaded; }; if (!hasBalloonData(objectId)) { // getPointInfo - это AJAX-запрос данных метки getPointInfo([objectId]).done(function(response) { var obj = objectManager.objects.getById(objectId); $.extend(true, obj.properties, response); obj.properties.loaded = true; _map.balloon.setData(obj); }); } });
Но иногда возникает ситуация, что две точки имеют одинаковые координаты и остаются объединенными в кластер до максимального масштаба. В этом случае при клике на кластер вызывается балун кластера.
Я хочу оставить двухколоночный макет, но в правую часть выводить данные в виде кастомного макета метки, такого же, как и при клике на одиночную метку. Данные должны подгружаться так же аяксом.
Все в целом работает, данные подгружаются, но балун не меняет своего внешнего вида. И выглядит пустым (см. картинку). Каким образом добавить название метки в левую часть? Как сделать так, чтобы правая часть балуна обновлялась сразу же, а не после переключения между точками?
UPD:
Получилось сделать только так:
getPointInfo(ids).done(function(response) { $.each(response, function(idx, pointInfo) { var obj = objectManager.objects.getById(pointInfo.id); $.extend(true, obj.properties, pointInfo); obj.properties.loaded = true; obj.properties.clusterCaption = pointInfo.title; }); var balloonData = objectManager.clusters.balloon.getData(); objectManager.clusters.balloon.setData(balloonData); });
Это правильный способ обновления содержимого балуна? Или можно то же самое сделать более правильно?