2011-08-09 12 views
14

Estoy trabajando con Google Maps API v3 para geocodificar direcciones. ¿Cómo paso información adicional a la función geocodeCallBack? Vea mi código & comentarios a continuación para entender lo que estoy tratando de lograr.Google Maps API v3: pase más información a GeoCode ¿Devolver la llamada?

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 
     }); 
} 

Respuesta

19

Hacer un cierre makeCallback del geocodeCallBack. El cierre se pone y mantiene la 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; 
} 

Por supuesto, también se puede hacer un cierre makeCallback(addressName) y pasar el nombre directamente, pero la versión anterior con el índice de dirección es más general.

+0

¿cómo el cierre aquí reemplaza la función de geocodificación aquí? Estoy confundido de cómo funciona –

Cuestiones relacionadas