我在地图上显示了许多标记,这些标记被组合成簇。还有一个表单,其字段应包含在地图上单击的对象的值。
因此,如果您单击单个标记,那么没有问题,我就是这样做的,但问题是当您单击任何集群内的对象时(当您单击集群时)我需要填写表单字段,有一个对象列表)-
但我不明白如何点击这些对象并从中获取数据
这是我的卡代码
ymaps.ready(function () {
var myMap = new ymaps.Map('map', {
center: [56.841542, 60.571872],
zoom: 4,
controls: []
}),
objectManager = new ymaps.ObjectManager({
clusterize: true,
clusterDisableClickZoom: true
});
myMap.geoObjects.add(objectManager);
objectManager.objects.events.add('balloonopen', function (e) {
// Получим объект, на котором открылся балун.
var id = e.get('objectId'),
geoObject = objectManager.objects.getById(id);
// Загрузим данные для объекта при необходимости.
downloadContent([geoObject], id);
let cityId = objectManager.objects.getById(id).properties.cityId;
let shopId = objectManager.objects.getById(id).properties.shopId;
let shopText = objectManager.objects.getById(id).properties.shopName;
$('#contacts_form .js-cities-select').val(cityId).trigger('change');
initShopsSelect($('#contacts_form .js-shops-select'), shopId, shopText);
});
objectManager.clusters.events.add('balloonopen', function (e) {
// Получим id кластера, на котором открылся балун.
var id = e.get('objectId'),
// Получим геообъекты внутри кластера.
cluster = objectManager.clusters.getById(id),
geoObjects = cluster.properties.geoObjects;
console.log(geoObjects)
// Загрузим данные для объектов при необходимости.
downloadContent(geoObjects, id, true);
});
function downloadContent(geoObjects, id, isCluster) {
// Создадим массив меток, для которых данные ещё не загружены.
var array = geoObjects.filter(function (geoObject) {
return geoObject.properties.balloonContent === 'идет загрузка...' ||
geoObject.properties.balloonContent === 'Not found';
}),
// Формируем массив идентификаторов, который будет передан серверу.
ids = array.map(function (geoObject) {
return geoObject.id;
});
if (ids.length) {
// Запрос к серверу.
// Сервер обработает массив идентификаторов и на его основе
// вернет JSON-объект, содержащий текст балуна для
// заданных меток.
ymaps.vow.resolve($.ajax({
url: '/local/ajax/map_balloons_json.php',
dataType: 'json',
processData: false
})).then(function (data) {
// Имитируем задержку от сервера.
return ymaps.vow.delay(data, 1000);
}).then(
function (data) {
geoObjects.forEach(function (geoObject) {
// Содержимое балуна берем из данных, полученных от сервера.
// Сервер возвращает массив объектов вида:
// [ {"balloonContent": "Содержимое балуна"}, ...]
geoObject.properties.balloonContent = data[geoObject.id].balloonContent;
});
// Оповещаем балун, что нужно применить новые данные.
setNewData();
}, function () {
geoObjects.forEach(function (geoObject) {
geoObject.properties.balloonContent = 'Not found';
});
// Оповещаем балун, что нужно применить новые данные.
setNewData();
}
);
}
function setNewData(){
if (isCluster && objectManager.clusters.balloon.isOpen(id)) {
objectManager.clusters.balloon.setData(objectManager.clusters.balloon.getData());
} else if (objectManager.objects.balloon.isOpen(id)) {
objectManager.objects.balloon.setData(objectManager.objects.balloon.getData());
}
}
}
$.ajax({
url: "/local/ajax/map_data_json.php"
}).done(function (data) {
objectManager.add(data);
});
});