Клуб API Карт

Заголовок не указан

Пост в архиве.

Здравствуйте...

Решил перейти на API2.0. Использую кластеризатор.

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

if (map.getZoom() < 14){

  placemarks[placemark_id].events.add('mapchange', function(e){
  this.balloon.open() ; 
  this.events.remove('mapchange', function(e){} ) ;
  },   placemarks[placemark_id]  ) ; 

  map.setCenter(  placemarks[placemark_id].geometry.getCoordinates()) ;
  map.setZoom(14) ;
   
}else{
    placemarks[placemark_id].balloon.open() ;
}

 

 Балун открывается. Но вот прослушивание события mapchange не снимается. Правильно ли я использую метод remove?

4 комментария
Дмитрий Сухоносов
28 января 2016, 05:00
в remove надо передавать ссылку на обработчик


http://api.yandex.ru/maps/doc/jsapi/2.x/update/concepts/update.xml
пункт Удаление обработчика события

Список аргументов при добаволении обработчика должен совпадать со списком при удалении обработчика. 

В данном примере при удалении слушателя отсутствует третий параметр, поэтому он и не удаляется.

Еще заметила одну вещь - вы слушаете событие mapchange, и по нему открываете балун на метке.

Но дело в том, что mapchange может сигнализировать как о добавлении метки на карту, так и об удалении метки с карты.

Чтобы убедиться, что метка была добавлена на карту, нужно добавить проверку

if (e.get('newMap')) {.....}

Спасибо! получилось :)