Клуб API Карт

Как узнать создан, ли элемент на карте?

Пост в архиве.
nikita.pimoshenko
9 ноября 2012, 13:06

Есть карта на которой генерируются точки и кластеры из базы. Под картой есть ссылки на города в которых присутствуют магазины. По клику на ссылки фокус карты перемещается по координатам данного города и должен открыться балун. Собственно он открывается, но присутствует фактор расстояния. По какой то причине допустим с фокуса на Москву открывается попап для Екатеринбурга, естественно точка Екатеринбурга на карте не видна по умолчанию, но не открывается балун на Грозном, его так же не видно. Искал по всему клубу не смог найти к сожалению, как проверить создался ли балун, или к примеру как отложить событие до того как балун успеет создаться. В JS я новичек.

11 комментариев

можно слушать "balloonopen" на карте

myMap.events.add('balloonopen', function () {

   ...

});

Есть один момент - мне нужно не открытие балуна словить а добавление на карту кластера, либо метки.

можно слушать событие add на коллекции

код будет сродни такому?

myCollection.events.add('add', function() { //callback });

а что делать если у меня нет коллекции?) видимо придется переделывать реализацию с помщью коллекции?

наверное можно слушать и на 

myMap.geoObjects (это ведь тоже коллекция)

но лучше завести отдельную и добавлять через нее

я там пару сообщений в тему добавил они могут не отобразиться так как ошибся веткой в них есть ссылка на проект, посмотрев его я думаю вам будет понятнее что я хочу сделать.

опять же косяк получается, срабатывать будет только при перемещении карты, или изменении зума, а вот если была бы проверка именно на то, что объект добавился на карту и готов к запросам.=(

либо я логики работы не понимаю. пишу вот такой код

if(this.map.balloon.isOpen())
      this.map.balloon.close()
    window.scrollBy(0, -9999);
    this.map.setCenter(mark.geometry._position);
    this.map.geoObjects.events.add('add', function(){
    var geoObjectState = myCluster.getObjectState(mark);
    if(geoObjectState.isShown)
    {
      if(geoObjectState.isClustered)
      {
        geoObjectState.cluster.balloon.open();
      }
      else
      {
        geoObjectState.isShown.obj.balloon.open();
      }
    }
    });

собственно проблема не решена, а я тут приболел =) таки вышел с больничного с новыми силами и пока опять же ничего не могу придумать. Обошелся костылем с setTimeout(func(), 40) - методом подбора вывел таймаут при котором создается балун)) Но вообще не хочется такой костыль пользовать. Может быть вы мне еще чего интересного подскажете?

 

Не очень понятно в чем конкретно заключается проблема.

У нас есть статья на эту тему с примером.

Может будет полезна

Вообще вся задача выглядит так - есть обработчик события онклик по ссылке он забирает название города, прогоняет массив с маркерами и выискивает там точки с городом таким же. После чего загоняет их в массив. Далее я устанавливаю центр карты на координатах необходимого города и хочу открыть балун, который есть у метки либо у кластера, который висит по этим координатам. Что интересно в ряде случаев он открывается в ряде нет, причем в обоих вариантах точки находятся за гранью видимой области карты.