Клуб API Карт

Несколько меток на карте

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

Добрый день.

Проблема такая. Необходимо создать карту, на которой расположены метки. Данные для геокодирования берутся из массива $('span.adress'). Соответственно, геокодирование происходит в цикле. Далее надо сделать, чтобы при щелчке на метке появлялся балун с названием из другого массива $(''.company_header).

window.onload = function() {
    var map;
    var geoResult;
    var adress = $("span.adress");
    var names = $(".company_header");

    map = new YMaps.Map(document.getElementById("YMapMain")

    map.addControl(new YMaps.Zoom()
    map.addControl(new YMaps.ToolBar()

    map.setCenter(new YMaps.GeoPoint(37.64, 55.76), 10);

    var gCollection = new YMaps.GeoObjectCollection("default#workshopIcon");

    for (i = 0; i < adress.length; i++) {
        adr = $(adress[i]).text(
        nam = $(names[i]).text(
        $(res[i]).attr("val", i);
        geocoder = new YMaps.Geocoder(adr, {results: 1, boundedBy: map.getBounds()}
        YMaps.Events.observe (geocoder, geocoder.Events.Load, function () {
            geoResult = this.get(0);
            $(res[i]).attr("val", i);
            YMaps.Events.observe(geoResult, geoResult.Events.Click, function() {
                this.description = nam;
            }
            gCollection.add(geoResult);
        }
    }
    map.addOverlay(gCollection);
}

 

Почему-то, текст берётся только из последнего элемента. И при щелчке на любой точке открывается балун с неизменным текстом, взятым из последнего элемента массива. А мне надо, чтобы текст менялся в зависимости от того, на какой метке щёлкнули

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

видоизменил функцию:

 

for (i = 0; i < adress.length; i++) {
        var adr = $(adress[i]).text();

        geocoder = new YMaps.Geocoder(adr, {results: 1, boundedBy: map.getBounds()});
        YMaps.Events.observe (geocoder, geocoder.Events.Load, function (x, i) {
            geoResult = x.get(0);
            geoResult.description = i + " " +geoResult.getGeoPoint();
            gCollection.add(geoResult);
        }(i));
    }

 

Простите за нубство, но не понимаю, как здесь сделать замыкание, чтобы функция приняла наконец этот параметр i

for (i = 0; i < adress.length; i++) {
        var adr = $(adress[i]).text();

        var geocoder = new YMaps.Geocoder(adr, {results: 1, boundedBy: map.getBounds()});
        YMaps.Events.observe (geocoder, geocoder.Events.Load, function (index) {
            return function (g) {
                var result = g.get(0);
                result.description = index + " " + result.getGeoPoint();
                gCollection.add(result);
            }
        }(i));
    }

Благодарю) Так работает))