Клуб API Карт

Вопрос по работе с gpx

igdev
22 апреля 2013, 16:00

Добрый день!

Прошу сильно не ругаться, но поймал ошибку, пока не могу точно разобраться в чем именно проблема, но последовательность в коде такова:

myMap.geoObjects.add(res.geoObjects);
myMap.panTo(topmenu.point, { flying: true, delay: 0, duration: 500 });

myMap.setBounds( res.geoObjects.getBounds() );

 

Если ставлю flying: false, то нет проблем и все работает, а вот с flying: true то есть ошибка, то ее нет...., причем не смог повторить последовательность действий однозначно проводящей к ошибке...

Как может влиять flying на setBounds? Ошибка просиходит setBounds, т.е. я ставил

alert( res.geoObjects.getBounds() );

до и после setBounds, который до срабатывает всегда, а вот который после, если ошибка произошла, не срабатывает, если ее нет, то срабатывает.

Сейчас работает версия с ошибкой http://igordev.ru/Devices/FishingMapKBR.html

Ошибка вылетает когда последовательно щелкаем мышкой именно отмеченные на картинке линки

Спасибо.

4 комментария
Подписаться на комментарии к посту
А приведите функцию которая вызывается при клике на детали проезда. 
Я поймал у вас там "too much recursion". Может дело и не в картах?

Там на каждую строчку с деталями вешается обработчик, который ниже, но еще раз отмечу, как только в коде ставлю "flying: false" все нормально работает.... причем если поймали ошибку, то карту даже сдвинуть мышкой невозможно....

$("< a class=\"title\" href=\"javascript:void(0)\">" + xml.text + "").bind("click", function (e)
{
var link = $(this);
if(link.hasClass("active"))
myMap.geoObjects.remove(res.geoObjects);
else
{
myMap.geoObjects.add(res.geoObjects);
myMap.panTo(topmenu.point, { flying: true, delay: 0, duration: 500 }) ;
myMap.setBounds( res.geoObjects.getBounds() ) ;
}
link.toggleClass("active") ;
} ) ;

У меня тут вопрос. А зачем у вас подряд две функции которые в общем то задают область просмотра? Если вы ставите flying:false то "карта переместится в конечную точку мгновенно, без анимации.", после этого срабатывет setBounds(), и всё нормально, но действие setBounds() в общем-то перекрывает действие panTo, там свой центр задаётся, так что в этом случае panTo() вообще не нужно вызывать. Если же вы выставляете flying: true, то начинает проигрываться анимация, после которой сразу же включается ещё одна функция которая тоже меняет область видимости, возможно проблема в этом. Попробуйте пользоваться только какой-то одной из этих функций, либо если уж так хотите использовать обе то:

myMap.panTo(topmenu.point, { flying: true, delay: 0, duration: 500, callback: function(){myMap.setBounds(res.geoObjects.getBounds() ) ; }}) ;

А лучше, на мой взглад, вместо последовательного panTo и setBounds сразу использовать:

myMap.setBounds( res.geoObjects.getBounds() ,{duration:500}) ;

Будет и анимация и результат тот же что и в вашем коде.

 

Согласен,

большое спасибо за разъяснения, действительно, что-то я  несколько перехимичил:)