2011-08-09 9 views
14

Google Maps API v3でジオコードを使用しています。 geocodeCallBack関数に追加情報を渡すにはどうすればよいですか?私が達成しようとしていることを理解するために、私のコード&のコメントを見てください。Google Maps API v3 - GeoCodeコールバックに詳細情報を渡しますか?

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

答えて

19

は閉鎖geocodeCallBackmakeCallbackしてください。クロージャは、取得し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; 
} 

、あなたも閉鎖makeCallback(addressName)を作り、名前を直接渡すことができますが、アドレスのインデックスと上記のバージョンは、より一般的です。

+0

ここで、ジオコード関数の代わりにクロージャを使用する方法はありますか?私はそれがどのように動作しているのか混乱している –

関連する問題