2013-07-30 4 views
0

Я пытаюсь добавить количество маркеров, чьи позиции (широта и долгота) выбираются из базы данных, я нахожусь в состоянии добавить их на карту, ноAPI Карт Google Marker

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

метод добавления события слушатель только к последнему маркеру (последний город в базе данных) ....

Как добавить Listner для каждого маркера отдельно?

Вот мой полный код ..

=================================== ==========================================

result contains List<City> 

    function OnSuccess(result) { 
       if (result) { 
        for (var i = 0; i < result.length; i++) { 
        alert(result[i].lat); 
         var myCenter= new google.maps.LatLng(result[i].lat,result[i].log); 
         var marker=new google.maps.Marker({ 
     position:myCenter}); 

    var infowindow = new google.maps.InfoWindow({ 
     content: result[i].desc 
    }); 

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

        } 

       } 
      } 

ответ

0

Вы необходимо закрыть. То, что вы делаете, переопределяет функцию обработчика кликов для каждого из ваших маркеров. Все маркеры, при нажатии будет выполнять эту строку:

infowindow.open(map,marker); 

Используя то, что значения «InfoWindow», «карта» и «маркером» являются в то время. И поскольку маркер создается в цикле, это всегда будет ссылаться на последний маркер.

Также infowindow пересматривается каждый раз. Таким образом, контент будет всегда соответствовать последним вашим результатам.

Вот как я обычно это делаю.

// create this outside of your loop 
var infowindow = new google.maps.InfoWindow({ 
    content: "" 
}); 

for (var i = 0; i < result.length; i++) { 
    var myCenter= new google.maps.LatLng(result[i].lat,result[i].log); 
    var marker=new google.maps.Marker({ 
     position: myCenter, 
     map: map 
    }); 

    bindInfoWindow(marker, map, infowindow, result[i].desc); 
} 


function bindInfoWindow(marker, map, infowindow, html) { 
    google.maps.event.addListener(marker, 'click', function() { 
     infowindow.setContent(html); 
     infowindow.open(map, marker); 
    }); 
}