Клуб API Карт

API 2.x Использование данных метки.

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

Здравствуйте.

Столкнулся с такой задачей:

Добавляю несколько меток на карту массивом, напр:

for(var key in arr){
  pm[i] = new ymaps.Placemark([coord], {
  hintContent: "ля-ля",
  balloonContent: i }, {

  }
}

- используется как id в базе и соответственно как индекс данного массива

Необходимо добавить прослушку клика с использованием id метки на которую кликнули:

pm[i].events.add('click', function(e){

        x=?;

alert(x);

}

вижу решение следующим образом:

при создании метки записываем в одно из его свойств id, а при клике обращаемся к этому свойству, но технически я этого реализовать не смог по причине отсутствия материала(

пробовал использовать properties.get/properties.set, но тщетно, не могу даже взять в прослушке метку:

this - не то;

e - по идее это event;

pm[i] - глупо, ибо i на момент клика будет иметь последнее значение....


надеюсь что я понятно изложил суть проблемы, помогите пожалуйста найти решение)

 

5 комментариев

1 Зачем итерироваться по массиву через for .. in, когда for in для объектов?

2. Зачем вешать обработчик клика на каждую метку, когда можно их добавить в коллекцию и повесить один обработчик на нее?

 

pm[i] - глупо, ибо i на момент клика будет иметь последнее значение....

 

Глупо, если не знать как это работает, проблема со ссылкой решается оборачиванием кода, навешающего обработчик события в immediate function

 

(function (i) {

// здесь "i" будет указывать на то что нужно

}(i));

 

 

в метке кладете id в properties прямо в конструкторе ymaps.Placemark (второй параметр)

и добавляете метку в коллекцию

в обработчике клика на элементах коллекции:

 

collection.events.add('click', function (e) {
    var placemark = e.get('target'); // метка в коллекции на которую кликнули

     placemark.properties.get('_prop_name_');
}); 

 

var placemark = e.get('target');

placemark.properties.get('_prop_name_');

Это то что надо) спасибо огромное!)

если Вас не затруднит ответить, то у меня еще вопрос качательно коллекций: существует ли способ скрыть/отобразить коллекцию?

map.geoObjects.add(collection)

map.geoObjects.remove(collection)

А как это сделать в 1.х ? можно ли там определить свойство id ?

приходится 1.х, т.к.  http://clubs.ya.ru/mapsapi/replies.xml?item_no=24236

всё гениально и просто: myPlacemark.id = arr['id'];