2015-11-03 58 views
0

我正在從Web服務檢索結果。結果以JSON形式返回。 JSON看起來像這樣:在Google地圖中使用JSON - 閉包?

{ 
    "001": { 
    name: 'Grocery Store', 
    latitude:30.2669456, 
    longitude:-97.7427782, 
    calendar: { 
     month: 'November' 
    } 
    }, 

    "002": { 
    name: 'Ice Cream', 
    latitude:30.2669425, 
    longitude:-97.7427742, 
    calendar: { 
     month: 'November' 
    } 
    } 
} 

檢索完此數據後,我試圖將其添加到Google地圖。我已成功初始化我的地圖。實際上,推針出現在正確的位置。當我將鼠標懸停在每個圖釘上時,標題顯示正確。但是,當我單擊推針並顯示信息窗口時,它會出現在每個推針的相同位置。另外,信息窗口的內容是相同的。我注意到它始終是與json中最後一個鍵相關的值。出於這個原因,我懷疑它與封閉有關。同時,我不知道如何解決這個問題。

我在做什麼錯?這裏是我的代碼循環的結果:

function dataRetrieved(json) { 
    for (var place in json) {     
    var marker = new google.maps.Marker({ 
     map: map, 
     title: json[place].name, 
     position: { 
     lat: json[place].latitude, 
     lng: json[place].longitude 
     } 
    }); 

    marker.info = new google.maps.InfoWindow({ 
     content: '<div>' + json[place].calendar.month + '</div>' 
    }); 

    google.maps.event.addListener(marker, 'click', function() { 
     marker.info.open(map, marker); 
    });      
    }      
} 

謝謝你的幫助!

+2

是的,這就是:http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example?rq=1 – Jamiec

回答

0

是的,這是你所期望的 - 當你點擊任何鏈接時,事件處理程序中使用的變量是循環中的最後一項。

修復它正是如此

(function(m){ 
    google.maps.event.addListener(m, 'click', function() { 
     m.info.open(map, m); 
    }); 
})(marker);