Клуб API Карт

Ссылка на объект карты из других частей кода

agmfromita
23 августа 2012, 18:08

Добрый день!

 

Начал разбираться с картами, немного запутался. Что делаю:

как в примерах иинциализирую карту

function myinitMap(){
  ymaps.ready(init);
}
function init () {
  var map = new ymaps.Map('map', {
          center: [55.76, 37.64], // Москва
          zoom: 20,
          type: 'yandex#hybrid'
});
......
}

 

Внутри функции init() применяю переменную map для управления картой.

 

Есть также функция go_to(lng,lat), внешняя по отношению к функции init(). Эта функция запускается обычной текстовой ссылкой по OnClick=return go_to(lng,lat). Надо спозиционироваться на конкретной точке и открыть балун.

 

Так вот проблема - не могу внутри функции go_to обратиться к экземпляру карты, созданному внутри функции init().

 

Вопрос дилетанский, чувствую, но и я в Javascript еще не силен :( Прошу помощи знающих товарищей. Спасибо

 

PS версия API 2.0

 

 

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

Мы написали 2 статьи про поиск ошибок (1, 2)

И еще рекомендую прочитать про область видимости (scope) в javascript. В интернете информации очень много

В самом простейшем случае (но не самый лучший вариант) поможет перенос объявления переменной "map" из функции-обработчика.

 

var map;

function init () {
  map =

Статьи читал, приемами активно пользуюсь. Они-то и показывают, что переменная map не видна там, где её хочется увидеть.

 

Предложенный вариант пробовал.

При переносе объявления за пределы функции перестаёт работать код внутри init(), во внутренностях обработчиков типа

map.events.add('click', function (e) {

    map.panTo(.....) ;

.....

}) ;

или

jQuery.getJSON('/index.php?r=/ajax/poisk', {center:coords, radius: radius}, function(data){
.........

map.setBounds([[min_lat,min_lng],[max_lat,max_lng]], {
                                 checkZoomRange: true,
                                 callback: function(err) {
                                     if (err) {
                                        //alert(err) ;                        
                                    }
                                 }
                            }) ;

.........

}) ;

Ну ладно, настала, видно, пора более глубоко окунуться в эту тему ;)

Спасибо!

и не пишите обработчики в onclick

все-таки на дворе уже 21 век )

пользуйтесь хотя бы jquery

Насчет OnClick - это лишь пример, за который не стоит цепляться. Мне просто надо, чтобы объект карты был доступен глобально.

Всё-таки, почему не работает вот такая конструкция?

 

var map;

function init () {
  window.map = ......;

 

window.map.events.add('click', function (e) {

    window.map.panTo(.....) ; //это уже не работает - просто игнорируется без ошибки

.....

}) ;

}

Спасибо

 

дай ссылку на страницу где не работает

Вопрос закрыт, разобрался. Вернее, что-то сделал, что заработало, как надо, но почему так получилось - для меня загадка ;) Век живи - век учись!  Всем удачи!