Клуб API Карт

(api 2.1) autopan() у balloon

Gooresh
11 июня 2014, 17:00

Есть такой код:

placemark.balloon.open();

placemark.balloon.autoPan();

 

в 2.0.х работает как часы, то есть есть балун открывается и автопаниться, в 2.1 открывается, но нет автопана и получаю ошибку -  Uncaught TypeError: Cannot read property 'apply' of undefined как побороть ?


Заранее благодарю :)

12 комментариев
Подписаться на комментарии к посту

Добрый день.

Действительно, есть такая проблема. Мы исправим отсутствие метода в ближайших версиях.

Хочу добавить, что, так как open() теперь асинхронная операция, правильно будет вызывать код следующим образом:

 

placemark.balloon.open().then(function () {

    placemark.balloon.autoPan();

});

Кроме того, если вам необходимо вручную вызывать метод autoPan по причине того, что у вас отключена опция autoPan по умолчанию, вы можете просто переопределять эту опцию для конкретного вызова:

polygon.balloon.open(undefined, undefined, { autoPan: true });

 

 

 

Доброго времени суток, попробывал оба способа, ошибками сыпать перестала, но желанного автопана тоже нет. К слову он не хочется центроваться и с включенным autoPan: true (если я конечно все правильно указал ) :

placemark = new ymaps.Placemark([p.x,p.y], p, {

            iconLayout: 'default#image',

            iconImageHref: p.icon,

            iconImageSize: [27,26],

            iconImageOffset: [-10, -23],

            ballonAutoPan: true,

            balloonLayout:myBalloonContentBodyLayout

        });

так же меня смутил тот факт что placemark.ballon.options - undefined, хотя как я понимаю я должен получить обьект опции.

 

Он не БалОн, он БалУн =)

ballon -> balloon

Два "о"

да хоть батон, лишь бы центровался :D

получилось?

нет к сожалению

А что вы подразумевате под центрированием? autoPan поздразумевает перемещение балуна в видимую область карты, если он в данный момент в ней не находится. И это поведение по умолчанию, если вы его не отключали вручную, никаких дополнительных действий не нужно.

 

Покажите пожалуйста пример страницы.

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

По поводу поведения - балун добавляю к конструкторе placemark(см. код выше), и если я правильно понял документацию ballonAutoPan: true, в любому случае устанавливает значение в true, проверит это я тоже не могу потому что placemark.balloon.options - undefined (что тоже странно), может коренем проблемы  является кастомный балун?

Скорее всего да. Ваш макет балуна должен иметь метод getShape и событие shapechange согласно интерфейсу ILayout ( http://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/ILayout.xml ) .

 

У нас есть пример правильного оформления собственного макета балуна с поддержкой autoPan: http://dimik.github.io/ymaps/examples/2.1/balloon-autopan/

Я... Я щас заплачу от счастья. Я искал это пример несколько дней.

Также я вижу, что вы задаете значение myBalloonContentBodyLayout, если это макет содержимого балуна, то нужно задавать его в опцию balloonContentLayout, а не balloonLayout.

Тогда никаких дополнительных действия для поддержки autoPan не потребуется.

да, balloonContentLayout решил отчасти проблему - появился автопан, но как я понимаю это опция именно для контента балуна, а не всего лаяута, то есть сейчас у меня мой балун оказывается внутри стандартного белого балуна с крестиком 

 

а  все разобрался, спасибо за помощь )