Клуб API Карт

Присвоение метке id.

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

Здравствуте!Такой вопрос:

Из базы тянутся данные о метках.id - идентификаторы, coords - координаты,name - название.

расставляются метки по этим данным на карте.Как мне привязать идентификаторы к каждой метки и что бы я мог получать их при клике на метку.Благодарен за ответы.

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

через properties (второй параметр в конструкторе ymaps.Placemark) и через методы get/set у соответствующего поля инстанса.

Слава Русов
28 января 2016, 04:11

вот кусок кода: 

ymaps.ready(init);

function init(){

    var myMap = new ymaps.Map("map", {

            center: [48.568515 , 39.315477],

            zoom: 12,

            behaviors: ['default', 'scrollZoom']

    });

    

    var points = ;

    count = points.length;

    for(i = 0; i < count; i++){

        placemark = new ymaps.Placemark([points[i]['point_coords_x'],points[i]['point_coords_y']] , {

            iconContent: points[i]['point_name'],

            iden: points[i]['point_id']

        } , {

            preset: 'twirl#greenStretchyIcon'

        });

            //alertObj(placemark.properties);

        myMap.geoObjects.add(placemark);

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

            alert(placemark.iden);//dslftn undefined

        });

    }

}

 

выдает undefined.В чем проблема что я делаю не так?

placemark.properties.get("iden")

Слава Русов
28 января 2016, 04:11

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

Детская ошибка. Внутри обработчика клика i будет равно count.

Оберните навешивание обработчика в self-invoking function или используйте forEach вместо for

Слава Русов
28 января 2016, 04:11

Прошу прощения за выедание мозга.Я просто c PHP работаю.Разве есть в javascript aeyrwbz forEach?И что такое self-invoking function?)

Слава Русов
28 января 2016, 04:11

ymaps.ready(init);

function alertObj(obj) { 

    var str = ""; 

    for(k in obj) { 

        str += k+": "+ obj[k]+"\r\n"; 

    } 

    alert(str); 

function init(){

    var myMap = new ymaps.Map("map", {

            center: [48.568515 , 39.315477],

            zoom: 12,

            behaviors: ['default', 'scrollZoom']

    });

    

if (!Array.prototype.forEach)

{

  Array.prototype.forEach = function(fun /*, thisp*/)

  {

    var len = this.length;

    if (typeof fun != "function")

      throw new TypeError();

 

    var thisp = arguments[1];

    for (var i = 0; i < len; i++)

    {

      if (i in this)

        fun.call(thisp, this[i], i, this);

    }

  };

}

 

function printBr(element, index, array) {

        placemark = new ymaps.Placemark([element['point_coords_x'],element['point_coords_y']] , {

            iconContent: element['point_name'],

            iden: element['point_id']

        } , {

            preset: 'twirl#greenStretchyIcon'

        });

        placemark.idenity = element['point_id'];

        myMap.geoObjects.add(placemark);

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

            alert(placemark.properties.get('iden'));

        });

}

    var points = ;

    points.forEach(printBr);

}

 

все равно id-шник последний

Прочитайте чтоли книжку по javascript 

        var points = [            { id : 1, name : 'Москва', x : 55.753559, y : 37.609218 },            { id : 2, name : 'Санкт-Петербург', x : 59.93772, y : 30.313622 },            { id : 3, name : 'Екатеринбург', x : 56.837982, y : 60.59734 }        ];        points.forEach(function (point) {            var placemark = new ymaps.Placemark([point.x, point.y], {                    iconContent : point.name,                    id : point.id                }, { preset: 'twirl#greenStretchyIcon' });            map.geoObjects.add(placemark);            placemark.events.add('click' , function(e){                console.log(placemark.properties.get('id'));            });        });
Слава Русов
28 января 2016, 04:11

Спасибо , о великий javascript'ер!))

Слава Русов
28 января 2016, 04:11

Как мне быть?Как назначить id и получать их по клику?

dimik,
этот код ничем не отличается от предыдущих. И он так же не работает.
А что, разработчики забили на свое детище? Кто-нибудь знает как получить айдишник по щелчку, или это утопия?
Слава Хавлин
23 января 2023, 14:33
pux.alexei,
Внутри callback клика по гео-объекту приходит event, в нем насколько я понял лежит IMapEvent вида: https://ibb.co/vq5829B

То бишь тебе нужно, что-то вроде:

const  target = event?.originalEvent?.target
let geoId = null

for (let key in target) {
  if (!key.startsWith('id')) {
    return
  }
geoId = target[key]
}
console.log(geoId)
Обновлено 23 января 2023, 14:36