Клуб API Карт

Как удалить обработчик событий для конкретного объекта в ObjectManager

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

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

Подскажите пожалуйста с ещё одной проблемой, которой не получается решить.
Задача простая: После события 'dblclick' на ломанную линию, которая находится в 'ObjectManager' удалить все обработчики событий, но только для указанной линии.

myObjectManager = new ymaps.ObjectManager();

myObjectManager.objects.events.add(['dblclick', 'mouseenter', 'mouseleave'], function(e)
{
	var objectId = e.get('objectId');
	
	switch( e.get('type') )
	{
		case 'dblclick':
		{
			AddID("#routes_road_id", objectId);
			
			myObjectManager.objects.setObjectOptions(objectId,
			{
				strokeColor: "00000088",
				strokeWidth: 7
			});

            // Удалить обработчик всех событий для objectId.
			
			break;
		}
		case 'mouseenter':
		{
			myObjectManager.objects.setObjectOptions(objectId,
			{
				strokeColor: "00FF0088",
				strokeWidth: 7
			});
			
			break;
		}
		case 'mouseleave':
		{
			myObjectManager.objects.setObjectOptions(objectId,
			{
				strokeColor: "FF000088",
				strokeWidth: 7
			});
			
			break;
		}
	}
});

myMap.geoObjects.add(myObjectManager);

И в догонку ещё уточняющий вопрос: Можно-ли хранить в свойствах гео объекта, который находит в 'ObjectManager' свои поля, например name, и как его получить в обработчике события?

12 комментариев
В ОМ делегирование событий через коллекцию и нет обработчиков для конкретных объектов – там и объектов то нет.
Нужно либо проверять objectId либо удалять объект из ОМ (переносить в другой ОМ)


Свои поля хранить можно (и нужно)
Получить через объект-событие
console.log(myObjectManager.objects.getById(objectId).properties);




dimik,
Прошу прощения что долго не отвечал :(
Про две коллекции это отличная идея, только вопрос, как более грамотно перенести объект из одной коллекции в другую, при этом что-бы все объекты коллекций имели одинаковые настройки (например цвет и толщину линий).
Дракон,
из одного ОМ удалить, в другой ОМ добавить.
Опции отображения объектов можно установить на уровне ОМ, а не на уровне объектов
dimik,
Спасибо за ответ.
В целом разобрался и сделал следующим образом:

var objectId = e.get('objectId');
var myObject = my1ObjectManager.objects.getById(objectId);
my1ObjectManager.objects.remove(objectId);
my2ObjectManager.add(myObject);
Но тут возникла другая проблема: У меня при наведении мышки меняется цвет линии, и в момент когда я переношу линию, у неё появляются индивидуальные свойства цвета, которые переопределяют глобальные. Как можно очистить эти свойства при переносе геообъекта?
Дракон,
переносите только те поля объекта, которые нужны (без options)
dimik,
К сожалению, я не на столько хороший программист, как может показаться, но я учусь и стараюсь.

Сделал следующим образом https://pastebin.com/5Cc4QcYR, но глючит (иногда некоторые дороги перестают реагировать на события, хотя их цвет не изменился), да и написано крайне коряво...


Пожалуйста, если Вас не затруднит, поправьте этот код до адекватного состояния.
Дракон,
https://pastebin.com/4hPbGcFg
dimik,
ого, красиво и понятно. Только вот поля "geoObjectStrokeColor" ввели в ступор... Во всех доках нету упоминания такого поля :(
Дракон,
Есть
 Опции для одиночных объектов задаются с префиксом geoObject. Список опций указан в описании класса Placemark.
dimik,
да, это видел, но не понял как можно задать толщину линии у точки, и соответственно у Placemark и geometry.Point свойства StrokeColor нету... Видимо я не умею пользоваться документацией...
Дракон,
Изначально ОМ поддерживал только метки, потом добавили поддержку других типов, а документацию не обновили.
Должно быть: Список опций указан в описании класса GeoObject.


Спасибо за внимательность, написал документаторам...
dimik,
Огромное Спасибо Вам за терпение и за помощь. Всё работает как часы.