Клуб API Карт

Как изменять оформление активной метки?

elf.warrior
9 июня, 12:26

На карте добавлено множество меток с помощью ObjectManager. Нужно сделать так, чтобы при клике на любую метку карта центр карты перемещался на метку (реализовано) и метка увеличивалась в размерах. При клике на другую метку предыдущая должна восстанавливать исходный размер и вся последовательность операций повторяться. Проблема с восстановлением исходного размера метки — не знаю, как реализовать. 

Нашел пост, где в комметарии предлагается вариант решения схожей проблемы. В моем случае такой вариант  не подошел, поскольку я не могу в получаемый json с данными для добавления в objectManager добавлять настройки для меток, да и как потом мне их переключать? Пробовал следующим образом (код обработчика клика на метке, для упрощения примем map и objectManager глобальными переменными):

function onPlacemarkClick(e) {
  const activeObject = e.get('target');
  const id = e.get('objectId');
  const coords = e.get('coords');

// перемещение карты
  map.setCenter(coords, 15, {duration: 200});

// установка параметров текущей метке
  objectManager.objects.setObjectOptions(id, {
    iconImageSize: [50, 50],
    iconImageOffset: [-25, -25]
  });

// попытка сброса параметров всем меткам в коллекции - не работает!!
  objectManager.objects.each(obj => {
    if (obj !== activeObject) {
// ругается на метод set
      obj.options.set({
        iconImageSize: [30, 30]
      })
    }
  });
}

Ругается затейливо, вот фрагмент:

Я подозреваю, что нет такого метода, но что тогда нужно использовать для реализации требуемого функционала? Или вообще сменить подход?

1 комментарий
Подписаться на комментарии к посту
Самое простое - хранить ссылку на текущую активную метку.


Опции в ОМ динамически можно менять через setObjectOptions
https://tech.yandex.ru/maps/doc/jsapi/2.1-dev/ref/reference/objectManager.ObjectCollection-docpage/#setObjectOptions