Estoy tratando de agregar marcadores a los mapas de Google iterando a través de una lista y recuperando información. Estoy usando la biblioteca de prototipos. El código es el siguiente:
var point = new Array();
var myMarkerOptions = new Array();
var marker = new Array();
recommendedList.each(function(item){
point[item.location.ID] = new google.maps.LatLng(item.location.lat, item.location.lng);
myMarkerOptions[item.location.ID] = {
position: point[item.location.ID],
map: map
};
marker[item.location.ID] = new google.maps.Marker(myMarkerOption[item.location.ID]);
});
Donde la lista recomendada es una respuesta JSON del formulario:
[
{"artist":"artist1","location":{"lat":"50.952226","lng":"5.34832","ID":28}},
{"artist":"artist2","location":{"lat":"52.362287","lng":"4.883965","ID":32}},
...
]
Sin embargo, esto no está funcionando. Sé que el problema no es sobre el JSON o el mapa de Google, porque probé una versión más simple con el siguiente código y funcionó:
var myLatlng = new google.maps.LatLng(recommendedList[0].location.lat,recommendedList[0].location.lng);
var marker = new google.maps.Marker({
position: myLatlng,
map: map
});
Entonces, el problema debe estar en la iteración y en los mapas hash. ¿Alguien puede ver el problema? ¡Gracias!
3 respuestas
Suficientemente simple para probar sin el .each
for (var i=0, item; item = recommendedList[i]; i++) {
point[item.location.ID] = new google.maps.LatLng(item.location.lat, item.location.lng);
myMarkerOptions[item.location.ID] = {
position: point[item.location.ID],
map: map
};
marker[item.location.ID] = new google.maps.Marker(myMarkerOption[item.location.ID]);
}
También puede simplificar esto bastante, a menos que "necesite" esas otras matrices:
for (var i=0, item; item = recommendedList[i]; i++) {
marker[item.location.ID] = new google.maps.Marker({
new google.maps.LatLng(item.location.lat, item.location.lng),
map
});
}
Creo que podrían ser los adaptadores de matriz que está utilizando. ¿Qué estás haciendo las matrices point
, myMarkerOptions
y marker
una vez que hayas terminado con ellas?
¿Puedes tratar de declararlas como
var point = {};
var myMarkerOptions = {};
var marker = {};
Eso le permitirá referirse a ellos como point[item.location.ID]
(etc.). Creo que con la propiedad item.ID
es un número, JS está tratando de establecer ese índice numérico de la matriz, en lugar de crear una nueva propiedad en su hash.
Prototipo de cada iterador no es compatible con JSON o tipo de datos de objeto.
Preguntas relacionadas
Nuevas preguntas
javascript
Para preguntas sobre la programación en ECMAScript (JavaScript / JS) y sus diversos dialectos / implementaciones (excepto ActionScript). Incluya todas las etiquetas relevantes en su pregunta; por ejemplo, [node.js], [jquery], [json], etc.