Клуб API Карт

balloon.open в обработчике события placemark "click" (с кластеризацией)

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

При открытии балуна через обработчик события метки "click" балун открывается и сразу закрывается. Заметил я это случайно, когда вставил костыль alert, под ним был открыт балун, нажимаешь на алерте Ok - балун изчезает.

Как оставить балун на месте после отработки собылия click?

 

myPlacemark = new ymaps.Placemark([item.x, item.y], data, options);
                        myPlacemark.events.add('click', function (e) {
                        var coords = this.geometry.getCoordinates(
                        var x = coords[0];
                        var y = coords[1];
                       
                        var parMap = this.getMap(
   
                        parMap.balloon.open(
                            // Позиция балуна
                            coords, {
                                // Свойства балуна
                                contentBody: 'test'
                            }, {
                                // Опции балуна. В данном примере указываем, что балун не должен иметь кнопку закрытия.
                                closeButton: true
                            }                   
                        alert ("Click!");
                    }, myPlacemark);

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

зачем открывать балун у карты при клике на метку?

почему нельзя открыть его у метки?

тогда весь этот изврат вроде как и не нужен

и не нужно слушать ради этого клик

Тихонов Станислав
28 января 2016, 04:46

Хочется контент в балун подгружать динамически при открытии - через $.ajax Внутрь балуна планирую вставлять готовый контент из ajax запроса, а вариант с макетами (http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/templateLayoutFactory.xml) мне не очень нужен, так как верстка будет получена из запроса, и, если честно, он показался мне черезчур сложным...

Тихонов Станислав
28 января 2016, 04:46

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

Тут многие мучаю Вас из-за того, что мало примеров в доке, а в инете в основном по 1 версии есть решения. Я обработчик click мучал 2 часа, пока он заработал, потому как нет четкого примера, как его использовать (я про параметр }, myPlacemark); в конце, без нег не работало, а про него в доках ничего нет). Так что пытаюсь использовать то, в чем разобрался...

если вы хотите минимизировать траффик, зачем тогда пересылать каждый раз верстку балуна? пересылайте для него данные, сделайте шаблон в который эти данные будут вставляться. Макеты кажутся сложными только на первый взгляд. Таким кажется все с чем сталкиваешься впервые. Но это самый правильный способ реализовать то что вы хотите, и пожалуй самый минимальный по количеству кода

Тихонов Станислав
28 января 2016, 04:46

А еще у меня используется кластеризатор, так что не открываются балуны стандартным методом

Вообще у вас должно происходить следующее:

1. Происходит клик.

2. Пытается открыться ваш балун.

3. Потом пытается открыться балун на плейсмарке.

4. Поскольку балун плейсмарка фактически пуст, он не открывается.

 

Попробуйте выставить плейсмарку опцию

myPlacemark.options.set('openBalloonOnClick', false);