2011-08-09 13 views
14

Pracuję z Google Maps API v3 na adresy geokodowe. Jak przekazać dodatkowe informacje do funkcji geocodeCallBack? Zobacz mój kod & komentarze poniżej, aby zrozumieć, co próbuję osiągnąć.Google Maps API v3 - Przekaż więcej informacji do GeoCode Oddzwonić?

var address = new Array(); 
address[0] = {name:'Building 1',address:'1 Smith Street'}; 
address[1] = {name:'Building 2',address:'2 Smith Street'}; 

for(var rownum=0; rownum<=address.length; rownum++) 
{ 
     if(address[rownum]) 
       geocoder.geocode({'address': address[rownum].address}, geocodeCallBack); 
} 

function geocodeCallBack(results, status) 
{ 
     var marker = new google.maps.Marker({ 
      map: map, 
      position: results[0].geometry.location, 
      //how can I also add the name of the building to the title attribute? 
      title: results[0].formatted_address 
     }); 
} 

Odpowiedz

19

Zrób zamknięcie makeCallback z geocodeCallBack. Zamknięcie dostaje i utrzymuje rownum:

for (var rownum=0; rownum<=address.length; rownum++) { 
    if (address[rownum]) 
     geocoder.geocode({'address': address[rownum].address}, makeCallback(rownum)); 
} 

function makeCallback(addressIndex) { 
    var geocodeCallBack = function(results, status) { 
     var i = addressIndex; 
     alert(address[i].name + " " + results[0].formatted_address); 
     var marker = new google.maps.Marker({ 
      map: map, 
      position: results[0].geometry.location, 
      // use address[i].name 
      title: results[0].formatted_address 
     }); 
    } 
    return geocodeCallBack; 
} 

Oczywiście, można również dokonać zamknięcia makeCallback(addressName) i podać nazwę bezpośrednio, ale powyżej wersja z indeksem adresowej jest bardziej ogólne.

+0

jak tutaj zamknięcie zastąpi funkcję geokodowania? Jestem zdezorientowany, jak to działa –

Powiązane problemy