Клуб API Карт

Проверить объект на принадлежность к ObjectManager

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

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

7 комментариев
Всеволод Шмыров
27 января 2016, 22:30
Добрый день. То есть у вас на карте есть обычные геообъекты и OM? Можно просто разные слушатели клика повесить на разныет типы объектов. Или проверять 'target' на наличие каких-нибудь полей, которые есть у геообъекта, но отсутствуют у OM.

Да, верно. На карте для geoObjects прослушивается событие contextmenu и для объектов ObjectManager прослушивается событие contextmenu.
 

Или проверять 'target' на наличие каких-нибудь полей

Проблема в том, что target у меня работает только для обычных объектов, а для объектов из OM используется уже objectId.

 

Всеволод Шмыров
27 января 2016, 22:30
Если есть поле e.get('objectId');, то это объект OM, если нет, то геообъект?

Каким образом? На undefined не сработает.

зачем это нужно?

На карте и ОМ и обычные объекты, нужно как-то их различать в плане того, что прослушивается contextmenu для обоих типов и, к примеру, когда кликаешь на объекте из OM вызывается еще и событие (contextmenu) для обычных объектов на карте, а там используется target и дальше идут вызовы, которые "взрываются", так как объект получен не через objectId.

Лучше положить объекты не из OM в отдельную коллекцию и слушать 'contextmenu' на ней вместо myMap.geoObjects
На OM так же повесить свои обработчики со своей логикой получения объекта по id.
Общая часть обработчиков этих событий может лежать в одной функции.