Клуб API Карт

Выполнить код после инициализации карты

Пост в архиве.

Привет! Подскажите, как выполнить код после инициализации карты.

Написал вот такой код

var visibleObject = myobjects.searchInside(myMap);

if(visibleObject.getLength()==0) {

    myMap.setZoom(6);

}

Он находит объекты в видимой области карты, и изменяет зум, если объектов нет. Он выполняется только после того как карта создана, например по клику.

Как сделать так, чтобы он сработывал сам после загрузки карты.

10 комментариев

вызывайте его в обработчике ymaps.ready

А где писать его? В функции инициализации или нет?

Если писать в функции вот так 

ymaps.ready(function(){

var visibleObject = myobjects.searchInside(myMap);

if(visibleObject.getLength()==0) {

myMap.setZoom(6);

}

});

страница просто виснет, а если вне функции, то не находит myobjects.

Каким способом нужно инициализировать карту, чтобы в этом обработчике сработал мой код? Пробовал создание карты просто через функцию init() , а затем вывоз ее ymaps.ready(init), так и просто сам вывозв карты в ymaps.ready(function(){

Вам надо почитать про замыкания и область видимости в javascript

Я написал функцию внутри функции инициализации таким образом.

var func = function() {

var visibleObject = myobjects.searchInside(myMap);

if(visibleObject.getLength()==0) {

myMap.setZoom(6);

}

}

и все равно никаким способом не получается ее вызввать именно после загрузки карты...

где у вас код создания карты?

Создайте пример с вашим кодом на jsfiddle.net и запостите тут ссылку

вы создали функцию func

где вы ее вызываете?

 

 

я пробовал ее вызывать вне функции инициализации window.onload = function() {func(); } таким образом, просто func(); вне функции в общем js скрипте, через ymaps.ready(func); просто в функции инициализации func(); + все тоже самое возвращая функцией инициализации через rerurn func;

и ни как не получилось! :(

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

У вас myobjects это объекты, которые вы получаете запросом за geoXml, они загружаются асинхронно. там где они загружаются и надо вызывать этот код

Спасибо, понял!