Клуб API Карт

События при добавлении всех объектов на карту.

Александр Домбровский
10 июля 2013, 20:13

Предыстория: На карту выводится 1000 объектов. Есть поле для ввода адреса, по этому адресу выполняется геокодирование и получаются координаты. По этим координатам среди всей 1000 объектов производится поиск ближайших и они выводятся списком на карте в содержимом балуна. Есть также кнопка, по которой происходит переход в раздел, где эти отделения нужно показывать списком. Получается, что при вводе адреса и нажатии кнопки смены способа отображения ближайших объектов (либо списком, либо на карте), при переходе со списка на карту, нужно отследить загрузку всех объектов на карту, чтобы можно было выполнить геокодирование.

Есть карта с 1000 баллунов, которые сгруппированны в кластеры. Есть ли возможность отследить событие добавления всех объектов на карту? Пробовал:

$map.geoObjects.events.add('add',function(){

            console.log(1);

});

Но это  событие срабатывает, после добавления каждого кластера. Может можно как-то отследить кол-во кластеров и выполнять проверки на количество уже добавленных кластеров на карту?

6 комментариев
Подписаться на комментарии к посту

Добрый вечер, а как вы предлагаете угадывать, что на карту был добавлен последний объект?

Я думаю, вы не до конца описали проблему. Покажите как вы добавляете объекты. Насколько я понимаю, ситуация в том, что вы добавляете объекты массивом в кластер и хотите получить событие, которое скажет вам, что кластеры перерисованы, их получилось ннадцать. Но это немного другое событие, нежели "все объекты добавлены".

Александр Домбровский
10 июля 2013, 23:05

Можно получить кол-во объектов и при каждом вызове события 'add' увеличивать некий индекс на 1 и сравнивать этот индекс с общим числом объектов.

У меня на карте выводится около 1200 объектов.

Добавление объектов на карту я делаю так:

var objects=[];
for (var i=0; i{
   objects[i]=this.addMarker(data[i]);
   this.clusterer.add(objects[i]);
}
this.allObjects=objects;
this.$map.geoObjects.add(this.clusterer);
мне нужно отследить событие, когда выполнится последняя строчка. Можно ли это сделать?

То есть, вы хотите сказать, что метод this.$map.geoObjects.add(this.clusterer); асинхронный?

Если нет, то вы можете отправить любое свое событие в строчке следом. На сколько я помню, он синхронный и никуда от вас не убежит. Пока все метки не добавит — будет ждать.

Александр Домбровский
10 июля 2013, 23:16

Хм.. а я этого не учел. Спасибо буду разбираться. Может я что-то не так сделал.

он асинхронный по-умолчанию

событие есть