我需要在这里重新安排代码,但我无法弄明白。我试图将地理编码的街道地址放在弹出窗口中。我知道它与函数之外的变量访问有关,但我现在只是移动代码而无处可去。
请参阅代码中的两个注释行。
map = new google.maps.Map(document.getElementById('map'), {
zoom: 10,
center: new google.maps.LatLng(37.725685, -122.156830),
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var places = <%= @locations.to_json.html_safe %>
var infowindow = new google.maps.InfoWindow();
var marker, i;
for (i = 0; i < places.length; i++) {
marker = new google.maps.Marker({
position: new google.maps.LatLng(places[i].lat, places[i].lng),
map: map
});
var lat = (places[i].lat);
var lng = (places[i].lng);
var geocoder = new google.maps.Geocoder();
geocoder.geocode({
'location': new google.maps.LatLng(places[i].lat, places[i].lng)
}, function (results, status) {
if (status === 'OK') {
// THIS CONSOLE LOG WORKS. IT PRINTS THE ADDRESS AS EXPECTED
console.log(results[0].formatted_address);
}
});
google.maps.event.addListener(marker, 'click', (function (marker, i) {
return function () {
infowindow.setContent(places[i].location_name + " <br /> " +
places[i].location_description + " <br /> " +
//HERE the variable "results" throws a Reference error, not defined
results[0].formatted_address);
infowindow.open(map, marker);
}
})(marker, i));
}
答案 0 :(得分:1)
results
作为来自geocoder.geocode()
函数的回调传递,但您在google.maps.event.addListener
函数中引用它。
如果您坚持使用自己的结构,请将addListener
来电置于if ( status === 'OK' ) {
区块。
简短的回答是 - 你有一个范围问题,因为你试图在另一个函数中访问一个函数的参数。