Клуб API Карт

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

Что за балун? Ссылка?

whiterabbitpushkin
27 января 2016, 23:05

Доброе утро,

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

Функцию построения маршрута привожу ниже

function getRoute(a_coordsB, a_coordsA, idObject, type) {

    a_route[idObject] = new ymaps.multiRouter.MultiRoute({

            referencePoints: [a_coordsB, a_coordsA],

            params: {

                avoidTrafficJams: true,

                routingMode: type,

            }

        }, {

            balloonLayout: routeBalloonLayout,

            balloonOffset: [-20, 30],

            balloonPanelMaxMapArea: 0

        });

    map.geoObjects.add(a_route[idObject]);

}

Подскажите, пожалуйста, синтаксис закрытия баллун у маршрута.

 

Если это делать через макет, то надо кидать событие userclose

this.events.fire('userclose');

whiterabbitpushkin
27 января 2016, 23:05

А если через обработчик события click?

Что-то типа такого

$(document).on('click', 'i.closeRouteInformer', function() {

    Закрытие баллуна

});

Как вы хотите через document получить ссылку на открытый балун?

Дело не в событии клик, а в том в каком месте кода его слушать.

Подписываться на этот клик надо в методе build вашего макета.

Я не вижу тут проблемы

Приведите код макета routeBalloonLayout

whiterabbitpushkin
27 января 2016, 23:05

А через a_route[idObject] получить ссылку на баллун никак нельзя?

Я пробовал через build, но у меня ничего не вышло(

Код макета ниже

routeBalloonLayout = ymaps.templateLayoutFactory.createClass(

                                    ''+

                                        ''+

                                            ''+

                                            ''+

                                                '{% if properties.type == "driving" %}' +

                                                'На автомобиле
' +

                                                '{% else %}' +

                                                'На общественном транспорте' +

                                                '{% endif %}'+

                                                'Время маршрута:{{ properties.duration.text }}'+

                                                'Длина маршрута:{{ properties.distance.text }}'+

                                                'Удалить маршрут'+

                                            ''+

                                            ''+

                                            ''+

                                        ''+

                                    ''

                            );

Я попробовал и все вышло

Дело в том что манипулирование объектами на карте через DOM это как бы совсем криво.

Надо использовать существующие в АПИ интерфейсы, а не лепить эти обработчики на document

whiterabbitpushkin
27 января 2016, 23:05

Понятно, больше не буду)

Если использовать ваш код, то у меня закрывается открытый баллун у маркера.

Как можно этого избежать?

whiterabbitpushkin
27 января 2016, 23:05

А другим способом можно это сделать?