Клуб API Карт

[Решено] Ограничить число меток определённым количеством

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

Доброго времени суток!

 

Пишу карту, на которой пользователь самостоятельно выбирает одно и только одно место. Условия: на карте должна быть одновременно только одна единственная метка/балун/попап/и т.д.

 

В API не нашёл такой настройки, гугление/яндексение тоже не дало ответа (если где пропустил – киньте в меня ссылкой, пожалуйста). Поэтому посмотрел в инспекторе в каких узлах хранятся метки и удаляю их.

 

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

1 – Кликнуть на карте (поставить метку)

2 – Открыть её балун (клик на метке)

3 – Открыть другую метку (клик где-нибудь ещё на карте)

4 – Открыть её балун (клик на новой метке)

В результате после открытия балуна новой метки восстаёт из мёртвых предыдущая метка (я же все их удалил). Более того, селектор `$('.ymaps-point-overlay')` утверждает, что метка на карте всего одна.

 

Демонстрацию можно посмотреть здесь: https://googledrive.com/host/0Bw2Nu_RxB88nNHBpWVNPR3BqVWM/ymaps2.html

JS-код можно посмотреть там же в читабельном виде (несжатый) в самом последнем теге script (перед закрывающим body).

 

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


Спасибо!


UPD (решение): использовать метод "myPlacemark.geometry.setCoordinates(coords)".

3 комментария

Удалять метки через удаление DOM-элементов это, мягко говоря, очень странно. Не стоит так делать.

Создайте одну метку, а в дальнейшем лишь изменяйте ее координаты. Можно посмотреть этот пример из блога.

Согласен, работа через DOM это костыль, когда есть API.

За пример из блога спасибо! Принцип "myPlacemark.geometry.setCoordinates(coords);" понял (:

Это решило проблему.

 

ps: я, видимо, не подружился со здешним поиском и не понимаю почему поиск removeAll() отдал только методы кластеров и групп, а прямой поиск по setCoordinates() дал только метод у интерфейса ломаной линии (а не общий или хотя бы для метки как ожидается), причём хождение по интерфейсам вверх от Placemark ведёт в другую сторону.

removeAll это как раз метод кластеризатора и групп. get/setCoordinates это методы геометрий. Их поддерживают все типы геометрий: полигон, ломаная, точка, прямоугольник и круг