Клуб API Карт

Карты 2.0 ошибка TypeError: this._xq is undefined

d@justopen.ru
2 июня 2016, 06:53

есть балун с оформлением

setBalloonLayout: function () {
                    var balloonLayout = ymaps.templateLayoutFactory.createClass(
                        '<div class="m-balloon">' +
                        '<a class="close" href="#"></a><div class="m-balloon-inner">' +
                        '<div class="map-description__name">$[properties.name]</div>' +
                        '<div class="map-description__address">$[properties.address]</div>' +
                        '</div></div>',
                        /*Переопределяем build балуна, для расчета смещения*/
                        {
                            build: function () {
                                var balloon    = this.getData().geoObject.balloon;
                                var projection = wifimap.map.options.get('projection');
                                var position   = this.getData().geoObject.geometry.getCoordinates();
                                var position_global_px = wifimap.map.converter.pageToGlobal(projection.fromGlobalPixels(position, wifimap.map.getZoom()));
                                var position_local_px  = wifimap.map.converter.globalToPage(projection.toGlobalPixels(position,wifimap.map.getZoom()));
                                wifimap.map.setGlobalPixelCenter([position_global_px[0] + position_local_px[0], position_global_px[1] + position_local_px[1] + 180]);

                                this.constructor.superclass.build.call(this);
                                /*Вешаем событие на кнопку закрытия*/
                                jQuery('.close').on('click', function (e) {
                                    e.preventDefault();
                                    balloon.close();
                                })
                            }
                        })
                    ymaps.layout.storage.add('wifi#balloon', balloonLayout);
                },

при открытии меняем координаты центра карты что бы балун был на экране
 

var projection = wifimap.map.options.get('projection');
var position   = this.getData().geoObject.geometry.getCoordinates();
var position_global_px = wifimap.map.converter.pageToGlobal(projection.fromGlobalPixels(position, wifimap.map.getZoom()));
var position_local_px  = wifimap.map.converter.globalToPage(projection.toGlobalPixels(position,wifimap.map.getZoom()));
wifimap.map.setGlobalPixelCenter([position_global_px[0] + position_local_px[0], position_global_px[1] + position_local_px[1] + 180]);

иногогда всё работает, иногда на вызове wifimap.map.setGlobalPixelCenter([position_global_px[0] + position_local_px[0], position_global_px[1] + position_local_px[1] + 180]); карты возвращают ошибку TypeError: this._xq is undefined

соотношение успехов к неудачам примерно 50/50 от чего это зависит понять не могу. 

2 комментария
Подписаться на комментарии к посту
1. Подключить debug-версию АПИ &mode=debug
2. Закрывать балун из макета надо, кидая событие userclose на макете, а не через balloon.close();
3. this.constructor.superclass.build.call(this); должно быть вызвано в самом начале метода build


wifimap.map.converter.pageToGlobal(projection.fromGlobalPixels(position, wifimap.map.getZoom()));

Не очень понятно, что именно вы тут делаете. Вернее понятно, что глупость делаете.
pageToGlobal – Преобразует локальные пиксельные координаты (координаты страницы) точки в глобальные.
fromGlobalPixels – Преобразует пиксельные координаты на указанном уровне масштабирования в координаты проекции (геокоординаты).
Вы берете координаты проекции (геокоординаты) и передаете в метод, ожидающий глобальные пиксели. Получив из него что-то (какие-то геокоординаты) вы передаете их в метод ожидающий локальные пиксели???


В целом – сдвигать карту в макете балуна – криво. Или надо тогда как минимум автопан выключать.
Сдвигать в макете балуна можно только саму верстку балуна. Сдвигать карту можно в обработчике события click на метке до открытия балуна
dimik,
спасибо, буду ковырять.

"В целом – сдвигать карту в макете балуна – криво. Сдвигать карту можно в обработчике события click на метке до открытия балуна.", тогда проблема с открытием кластеров