Клуб API Карт

Обработчик балуна, контекстное меню

i1481553
21 мая, 21:36
Добровго времени суток!

Помогите найти решение. Стоит задача, организовать свое контекстное меню по нажатию на карту и другое меню, по нажатию на балун. Ниже приведен код, каким образом я добавляю балуны и контектсное меню для карты. Не могу реализовать контекстное меню для балунов. Вообще ни какие обработчики на балунах созданных таким образом не отрабатывают.

function init(){
    myMap = new ymaps.Map("YMap", ...

for (var i = 0; i < $countPlaces; i++) {
    var polygonLayout = ymaps.templateLayoutFactory.createClass(
        '<div id="'+myPlacemarks[i]['s_id']+'" class="mark-on-map">
           <img src="1.img">
         </div>');
    myPlacemark = new ymaps.Placemark(
        [myPlacemarks[i]['latitude'], myPlacemarks[i]['longitude']], {
            hintContent: 'Маркер'
        }
    );
    myMap.geoObjects.add(myPlacemark);
}

myMap.events.add('contextmenu', function (e) {

                // Если меню уже отображено, то убираем его.
                if ($('#menu').css('display') == 'block') {
                    $('#menu').remove();
                }
                // HTML-содержимое контекстного меню.
                var menuContent = '<div id="menu"> 
                ...    
            });

Попытка повесить простого обработчика клика на балун не дает ни какого результата. Получить доступ к элементу через getElemetById тоже не удается, поскольку объект еще не существет на странице в момент его поиска по id

// не отрабатывает
myPlacemark.events.add('click', function (e) {
   console.log("test");
});
// не отрабатывает
myMap.geoObjects.events.add('click', function () {
   console.log("tets");
});

2 комментария
Подписаться на комментарии к посту
Макеты не надо создавать в цикле, должен быть один на все полигоны
var polygonLayout = ymaps.templateLayoutFactory.createClass(
    '<div id="{{ properties.id }}" class="mark-on-map"><img src="1.img"></div>'
);
for (var i = 0; i < $countPlaces; i++) {
myPlacemark = new ymaps.Placemark(
[myPlacemarks[i]['latitude'], myPlacemarks[i]['longitude']], {
hintContent: 'Маркер',
id: myPlacemarks[i]['s_id']
}
);
myMap.geoObjects.add(myPlacemark);
}


Обработчики событий на элементах балуна назначают в методе build макета, см. пример в песочнице
dimik,
спасибо! Вы мне очень помогли. Все отлично работает.
P.S. И правда, в цикле создавать макеты... Как-то не обратил внимания :) 
Обновлено 24 мая, 15:09