Клуб API Карт

Uncaught TypeError: ymaps.Map is not a constructor

mayakovsky-studio
2 марта 2017, 11:11

Почему-то не грузится яндекс карта. 

Ситуация следующая: 

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

Далее, после того, как блоки добавлены в страницу, запускаю карту вот так: 

var all_coord=document.getElementsByClassName('js-coord-house-complex');

          for(var i=0; i<all_coord.length;i++){
            var id=all_coord[i].getAttribute('id');
            var coord=all_coord[i].value.split(',');
            var nameComplex=all_coord[i].getAttribute('name');

            ymaps.ready(init(id));
            var myMap;

            function init(id){
                myMap = new ymaps.Map("map_filter_"+id, {
                    center: [coord[0],coord[1]],
                    zoom: 15,
                    controls: []
                });

                /*код-код-код*/


            }
          }

Ну то есть я обращаюсь к инпутам, специально положенным, беру у них инфу о координатах и id, по id нахожу нужный блок и гружу в него карту. P.S.  у меня несколько блоков, в которые надо яндекс грузануть. 

И если делать все так, как есть, то выдает ошибку, НО! Если весь этот код обернуть в таймер на 2 секунды, то что-то успевает прогрузится и карта грузится. Но иногда все-равно не успевает. 

 

setTimeout(function(){



          var all_coord=document.getElementsByClassName('js-coord-house-complex');

          for(var i=0; i<all_coord.length;i++){
            var id=all_coord[i].getAttribute('id');
            //тут далее код, который выше писал
          }



},2000);

Как это решить, помогите, пожалуйста!

6 комментариев
В ymaps.ready надо передавать функцию, а не результат ее вызова (если он не возвращает другую функцию)
mayakovsky-studio
2 марта 2017, 11:48
dimik,
А можно поточнее объяснить что значит не результат вызова? Или на примере? Не очень понял. 
mayakovsky-studio,
Между ymaps.ready(init(id)); и ymaps.ready(init); есть разница. Если нужно передавать в функцию аргумент (хотя по вашему коду это не нужно) возвращайте из нее другую функцию.
Обновлено 2 марта 2017, 12:01
mayakovsky-studio
2 марта 2017, 12:00
dimik,
Ого, вот оно что. Спасибо! А как мне тогда можно передать id в эту функцию?
mayakovsky-studio,
Например так:
function init(id){ 

  return function () {
    var myMap = new ymaps.Map(id, ...)
  };
}


Лучше почитать что-нибудь по javascript
mayakovsky-studio
2 марта 2017, 12:19
dimik,
Спасибо!