Клуб API Карт

Как выбрать все метки на карте в 2.1?

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

Задача вроде бы простая, но почему то не хочет корректно работать:

 

var myMap;

ymaps.ready(init);

 

function init () {

  myMap = new ymaps.Map("map", { center: [54.83, 37.11], zoom: 5 }),

 

// добавим пару меток

myPlacemark  = new ymaps.Placemark([55.907228, 31.260503]);

myPlacemark2 = new ymaps.Placemark([56.907228, 32.260503]);

 

myMap.geoObjects.add(myPlacemark);

myMap.geoObjects.add(myPlacemark2);

 

// и еще пару меток, в принципе тут ничего интересного

myPlacemark  = new ymaps.Placemark([52.907228, 31.260503]);

myMap.geoObjects.add(myPlacemark);

myPlacemark  = new ymaps.Placemark([53.907228, 31.260503]);

myMap.geoObjects.add(myPlacemark);

 

// вешаем событие клика на метку

myMap.geoObjects.events.add('click', function (e) {

  // тут должны закрасится все хинты в цвет по умолчанию

  myMap.geoObjects.options.set({preset: 'islands#blueDotIcon'}); 

  // тут закрашиваем метку по которой кликнули нужным цветом

  // работает корректно, но кажется что вместо .get('target') надо написать что то другое

  e.get('target').options.set({preset: 'islands#darkOrangeDotIcon'});

});

}

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

Хинты != метки

Установка опции метке напрямую имеет более высокий приоритет чем установка той же опции на коллекцию. 

Скажем проще  e.get('target') выделяет так понимаю все что было когда то кликнуто, как узнать по чему сейчас кликнули тоесть к примеру что то такого плана должно получится e.get('this'), но get по документации имеет только два параметра если не ошибаюся тип и таргет

Хинты != метки

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

 

И для большей наверно развернутости ответа, как можно метке передать какие либо параметры, например, адрес, телефон и тп, но по факту балун не нужен. Нужно знать что кликнули по метке с адресом таким то и телефоном таким то... Не хочется каждой метке создавать отдельный обработчик события, это не есть хорошо.

 

target это и есть геообъект на котором сработало событие.

собственные данные передаются вторым параметром в конструктор метки

Добавлю так же что строчка 

myMap.geoObjects.options.set({preset: 'islands#blueDotIcon'}); отрабатывает только один раз, а для первого добавленной метки без балуна делает ликвидацию его внешнего вида с карты, возможно это некоторый баг.

 

var myMap;

ymaps.ready(init);

 

function init () {

    myMap = new ymaps.Map("map", { center: [54.83, 37.11], zoom: 5 });

myPlacemark  = new ymaps.Placemark([55.907228, 31.260503]);

myPlacemark2 = new ymaps.Placemark([56.907228, 32.260503]);

 

 

myPlacemark.events.add('click', function (e) { 

myMap.geoObjects.options.set({preset: 'islands#blueDotIcon'});

myPlacemark.options.set({preset: 'islands#darkOrangeDotIcon'});

console.log('myPlacemark');

});

 

myPlacemark2.events.add('click', function (e) { 

myMap.geoObjects.options.set({preset: 'islands#blueDotIcon'});

myPlacemark2.options.set({preset: 'islands#darkOrangeDotIcon'});

console.log('myPlacemark2');

});

 

myMap.geoObjects.add(myPlacemark);

myMap.geoObjects.add(myPlacemark2);

 

}

 

кликаем сначала по одной метке после загрузки страницы и кликаем перезагрузив страницу по другой метке, видим что поведение разное.

с  myPlacemark  = new ymaps.Placemark([55.907228, 31.260503],{},{preset: 'islands#blueDotIcon'}); все работает корректно