Клуб API Карт

Открытие балуна внешней сылкой

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

Уже посмотрел несколько примеров да и вроде делаю по аналогии, по почему-то открывается только последний балун при клике на люблю сылку.

Помогите разобраться в чем проблема. 

 

 var myMap;
ymaps.ready(init);
function init() {
    myMap = new ymaps.Map('map', {
        center: [54.186733, 37.602613],
        zoom: 10
    });
    var items = [{
        cord: [54.136733, 37.502613],
        adres: "г. Тула, пр-кт Ленина, д. 31",
        time: "пн.-ср.: с 9.00 до 21.00",
        phone: "+7 (4872) 45-95-63",
    }, {
        cord: [54.186733, 37.602613],
        adres: "г. Тула, ул. Пролетарская, д. 22а, ТЦ «РИО»",
        time: "10.00 до 22.00 ",
        phone: "+7 (4872) 45-95-63",
    }, {
        cord: [54.246933, 37.468874],
        adres: "г. Тула, ул. Демидовская плотина, д. 9",
        time: "пн-пт: с 12.00 до 17.00, сб: с 12.00 до 15.00, воскресенье - выходной",
        phone: "+7 (4872) 45-95-63",
    }, {
        cord: [54.253367, 37.608263],
        adres: "г. Тула, ул. Октябрьская, д 30 ",
        time: "пн-пт: с 10.00 до 22.00",
        phone: "+7 (4872) 45-95-63",
    }, ]
    var collection = new ymaps.GeoObjectCollection(null);
    myMap.geoObjects.add(collection);
    var menu = $('.address-list-menu');
    items.forEach(function(item) {
        var menuitem = $('<li><a href="javascript:void(0)" class="list-item">' + item.adres + '<br>' + item.time + '</a></li>');
        placemark = new ymaps.Placemark(item.cord, {
            balloonContent: '<span class="balloonLabels">Адрес:&nbsp</span><span class="balloonContent">' + item.adres + '</span><br><span class="balloonLabels">Режима работы:&nbsp</span><span class="balloonContent">' + item.time + '</span></br>' + '<span class="balloonLabels">Телефон: &nbsp</span><span class="balloonContent">' + item.phone + '</span>'
        }, {
            iconLayout: 'default#image',
            iconImageHref: 'images/contact/mark2.png',
            iconImageSize: [50, 50],
            iconImageOffset: [-3, -42]
        });
        collection.add(placemark);
        menuitem.appendTo(menu).on('click', function() {
            if (placemark.balloon.isOpen()) {
                placemark.balloon.close();
            } else {
                placemark.balloon.open();
            }
        });
    });
}

 

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

Тут разбираться надо в javascript.

у вас в items.forEach меняется глобальная ссылка на placemark

в конце цикла она будет указывать на последний placemark

Спасибо большое и прошу прощение. Недоглядел...

В статье откуда этот код, там как раз локальная переменная, (объявлена с var) поэтому и нет такой проблемы