Клуб API Карт

При клике на метку нужно сделать редирект на нужную ссылку

Вячеслав Шевченко
13 ноября 2014, 17:08

Есть JSON массив с объектами типа 

{AVATAR: null
COORDS_LAT: "42.8956"
COORDS_LON: "71.3669"
ID: "1"
TITLE: "тестовый"}

 

Я в цикле for вывожу элементы на карту

 

for (var i in data) {

    var pointChatGeometry = new ymaps.geometry.Point([data[i].COORDS_LAT, data[i].COORDS_LON]);

    var geoObjectChat = new ymaps.GeoObject({

        geometry: pointChatGeometry,

        properties: {}

    }, {

        draggable: false,

        hintHideTimeout: 0

    });

    geoObjectChat.events.add("click", function(e) {

        console.log(data[i].ID);

    });

    myMap.geoObjects.add(geoObjectChat);

}

 

При клике на метку в консоли всегда только ID последнего объекта. Как сделать так чтобы при клике выводился ID того, элемента на который я щелкнул. Дальше уже я разберусь как сделать редирект.

2 комментария
Подписаться на комментарии к посту
Всеволод Шмыров
13 ноября 2014, 17:45
Добрый вечер. Вы в цикле создаете локальные функции со своими областями видимости. На момент клика значение i всегда будет равно последнему значению в цикле. Вам нужно или обернуть слушатель в отдельную функцию

(function (currentValue) { ... })(i);
или, что гораздо правильнее записать в поля геобъекта его номер. К примеру, в properties. На все геообъекты навешивать один слушатель и в нем получать это значение.
var geoObjectChat = new ymaps.GeoObject({
    geometry: pointChatGeometry,
    properties: { index: i}
},{
    draggable: false,
    hintHideTimeout: 0
});
geoObjectChat.events.add("click", this._onGeoObjectClick);
// TODO да и здесь лучше событие на коллекцию вешать
// ...

function _onGeoObjectClick (e) {
    console.log(
        e.get('target').properties.get('index')
    );
}
Вячеслав Шевченко
14 ноября 2014, 07:11
Спасибо за помощь мне это помогло.