Клуб API Карт

map - определение отсутствует

max.zolotyh
3 июля 2011, 19:47

 

Доброго времени суток!

 

Есть страница с картой, созданной типовым способом:

<script type="text/javascript">

YMaps.jQuery(function () {".
       map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]
       map.setCenter(new YMaps.GeoPoint(59, 60), 12);

}

</script>


Необходимо обратиться к объекту map из другой процедуры того же документа. Например:

<a href="#" onClick="alert(map.getCenter().toString());return false;">Показать!</a>

Вполне естественной реакцией является "map-определение отсутствует" (ведь получается что объект map существует только в функции onLoad).

 

Каким образом возможно получить ссылку на объект в глобальном пространстве страницы?

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

Спасибо, помогло. Я конечно вариант с глобальной переменной испробовал сразу, но он потерпел фиаско т.к. я обращался к window.map до выполнения функции onLoad, где этой переменной присваивается значение, поэтому и сделал поспешный вывод о непригодности такого подхода)))

Выходом является конструкция:

if(window.map) alert(window.map.getCenter().toString());

 

Но кстати - объект map в общем случае создаётся в событии onLoad и, поидее, должен быть разрушен по завершении выполнения процедуры. Т.к. он не разрушается - могу предположить что map - всего-лишь ссылка на объект в памяти, а не сам объект. Таким образом всё-равно должен быть способ его обнаружения без использования глобального пространства....но это уже риторический вопрос)

 

 

способ есть, но при размещении javascript кода в аттрибутах onclick

(а ведь есть еще и другие способы вешать обработчики на ссылки)

контекст этого кода будет window

 

насчет onLoad тоже не совсем верно

есть вариант загрузки АПИ по-требованию (позже при необходимости)

Кстати этот пример я смотрел и был удивлён тем, что объект каждый раз пересоздаётся без видимых на то причин, и, мало того, не удаляется (хотя скорее всего это может происходить фоном при создании нового объекта в том же контейнере).