Вопрос Noob: Как получить информацию, если карта Google загружена (инициализирована) - PullRequest
1 голос
/ 16 ноября 2010

Я новичок в Google Maps API. Я взял образец из руководства и попытался изменить его так, как мне нужно, поэтому вот что я пытаюсь сделать: Это пример из руководства Google Maps

  var geocoder;
  var map;
  function initialize() {
    geocoder = new google.maps.Geocoder();
    var latlng = new google.maps.LatLng( 40.714353, -74.005973);
    var myOptions = {
      zoom: 10,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
  }

  function codeAddress() {
    var address = document.getElementById("address").value;
    geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        map.setCenter(results[0].geometry.location);
        var marker = new google.maps.Marker({
            map: map, 
            position: results[0].geometry.location
        });
      } else {
        alert("Geocode was not successful for the following reason: " + status);
      }
    });
  }

Я немного изменил функцию codeAddress и пытаюсь вызвать ее при загрузке страницы следующим образом:

function codeAddress(address) {
        //var address = document.getElementById("address").value;
        geocoder.geocode( { 'address': address}, function(results, status) {
          if (status == google.maps.GeocoderStatus.OK) {
            map.setCenter(results[0].geometry.location);
            var marker = new google.maps.Marker({
                map: map, 
                position: results[0].geometry.location
            });
          } else {
            alert("Geocode was not successful for the following reason: " + status);
          }
        });
      }
codeAddress("Some Address");

Но это дает мне ошибку javascript "геокодер не определен". Как заставить скрипт ждать, пока карта загрузится, а затем запустить функцию codeAddress? Я не хочу указывать свой адрес во время инициализации.

Надеюсь, это понятно Заранее спасибо.

1 Ответ

2 голосов
/ 16 ноября 2010

Проблема в том, что вы вызываете codeAddress непосредственно после его определения (и, следовательно, это происходит до запуска метода initialise().

Следовательно, вам нужно запустить это позже для некоторого триггера. Быстрый и грязный способ сделать это - установить это как событие onload тела; это подождет, пока все ресурсы (включая изображения) не будут полностью загружены, но это может быть не слишком большой проблемой, учитывая, что карта также является изображением.

В качестве альтернативы, большинство сред JS предоставляют очень удобные методы для запуска ваших обработчиков в различных точках жизненного цикла страницы. Если вы используете один из них, вы можете изучить доступные вам варианты и выбрать лучший, который зависит от ряда факторов.

Критически, не забывайте, что вы должны позвонить initialise(), прежде чем позвонить codeAddress()!

...