Клуб API Карт

myCollection.options.unset Не отрабатывает

sila4bambula122
19 августа 2016, 19:46

Вот не решу еще 1 задачу.
При клике на маркер устанавливаю для нее Стиль.

myPlacemark.events.add('click', function (e) {
e.get('target').options.set('preset', 'islands#redDotIcon');
});
Но не получается вернуть ей первоначальный вид при клике на саму карту, или другую марку.
Пробовал так, ошибок не выдает но не реагирует

myMap.events.add('click', function (e) {
myCollection.options.unset('preset');
});
Задумка такая что должен быть на карте 1 активный Placemark или 0

=========================================================

Решил задачу так. Посмотрел бы на более правильный вариант

var myCollection = new ymaps.GeoObjectCollection();
				for (i = 0; i < points.length; i++ ){
				    var myPlacemark = new ymaps.Placemark([
				      points[i][0], points[i][1]
				    ]);
				    myPlacemark.events.add('click', function (e) {
				    	var thisPlacemark = e.get('target');
				    	toggleActivePlaceMark(thisPlacemark);
			            console.log(thisPlacemark.geometry._coordinates);
			        });
				    myCollection.add(myPlacemark);

				}
				myMap.geoObjects.add( myCollection );	
				myMap.setBounds( myCollection.getBounds() );

				myMap.events.add('click', function (e) {
				  	toggleActivePlaceMark();
				});
				
				function toggleActivePlaceMark(placemark){
				    if(myCollection.activeIndex !== undefined){
				    	myCollection.get(myCollection.activeIndex).options.unset('preset');
				      myCollection.activeIndex= undefined;
				    }
				    if(placemark){
				        myCollection.activeIndex = myCollection.indexOf(placemark)
				        placemark.options.set('preset', "islands#redDotIcon");
				    }
				}

2 комментария
Подписаться на комментарии к посту
В АПИ иерархическая система опций. Опции на метке приоритетнее, чем опции родителя.


1. Навешивать слушателя на каждую метку в цикле – плохо.
В АПИ можно как и в DOM использовать делегирование событий

2. Использовать indexOf в данном случае нет смысла (перебор всех элементов тут не нужен)


Ссылку на активный элемент лучше хранить в state коллекции (он для таких целей и создан)


http://jsfiddle.net/84z51v10/
Не используйте педальные поля, они не будут работать в продакшн-версии.
Нужно использовать документированные интерфейсы
thisPlacemark.geometry._coordinates => thisPlacemark.geometry.getCoordinates()