2012-08-23 56 views
0

我查找错误,但无法找到它。任何谷歌地图infoWindow总是出于某种原因显示相同的信息。Google maps api中的infoWindow数组

这里是一个CoffeeScript的代码

infowindow = new google.maps.InfoWindow() 
for company in companiesData 
    marker = new google.maps.Marker({ 
    position: new google.maps.LatLng(company.latitude, company.longitude) 
    map: map 
    }) 

    #debugger ---> each company.name is different! 
    google.maps.event.addListener(marker, 'click',()-> 
    infowindow.setContent(company.name) 
    infowindow.open(map,this) 
) 

我调试它,看到每个company.name是不同的。

输出的JavaScript

infowindow = new google.maps.InfoWindow(); 
    _results = []; 
    for (_j = 0, _len1 = companiesData.length; _j < _len1; _j++) { 
    company = companiesData[_j]; 
    marker = new google.maps.Marker({ 
     position: new google.maps.LatLng(company.latitude, company.longitude), 
     map: map 
    }); 
    _results.push(google.maps.event.addListener(marker, 'click', function() { 
     infowindow.setContent(company.name); 
     return infowindow.open(map, this); 
    })); 
    } 
    return _results; 
}); 

那么,是一个错误?

回答

3

您需要获得可变公司的关闭。您可以通过在独立功能中创建标记来实现这一点。例如:

infowindow = new google.maps.InfoWindow() 
for(var n = 0 ; n < n companiesData.length ;n++){ 
    createMarker(companiesData[n]); 
} 

function createMarker(data){ 
    var marker = new google.maps.Marker({ 
    position: new google.maps.LatLng(parseFloat(data.latitude), parseFloat(data.longitude)), 
    map: map 
    }) 

    #debugger ---> each company.name is different! 
    google.maps.event.addListener(marker, 'click', function(){ 
    infowindow.setContent(data.name); 
    infowindow.open(map,this); 
    } 
) 
} 

Explanation here.

+0

没错。但为什么它工作?有什么不同? – Alexandre

+0

查看我在回复的底部发布的链接,其中显示“此处解释”。 – Marcelo