/ / js: el entorno fue capturado durante la creación de la función. ¿Cómo puedo superar esto? - javascript, cierres, geocodificación

js: el entorno fue capturado durante la creación de la función. ¿Cómo puedo superar esto? - JavaScript, cierres, geocodificación.

Estoy ejecutando el siguiente script que geocodifica:

function find_callback(response){

var map = g_waze_map.map;
var first_result = response[0];

var lonlat = new OpenLayers.LonLat(first_result.location.lon,first_result.location.lat);

g_waze_map.map.setCenter(lonlat);

var size = new OpenLayers.Size(36,47);
var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
var icon = new OpenLayers.Icon("http://www.waze.co.il/images/home.png",size,offset);

var markers = new OpenLayers.Layer.Markers( "Markers" );
map.addLayer(markers);
markers.addMarker(new OpenLayers.Marker(lonlat,icon));

map.addPopup(new OpenLayers.Popup.FramedCloud("test",lonlat,null,
"<div style="font-family:Arial,sans-serif;font-size:0.8em;">"+first_result.name+"<div>",
anchor=null,true,null));
};

Cuando invoco las 3 llamadas para "buscar" en un lote(como parte de mi JS) obtengo un mapa con solo el 3er piont en él. Cuando los invoco a través de la consola de Chrome (uno por uno) obtengo un mapa con los 3 puntos. ¿Es la devolución de llamada la que mantiene su entorno? Si es así, ¿cómo puedo superar esto?

function onInit(){

g_waze_map.find("<%#Locations[2]%>","find_callback");
g_waze_map.find("<%#Locations[3]%>","find_callback");
g_waze_map.find("<%#Locations[5]%>","find_callback");

}

Respuestas

0 para la respuesta № 1

Este guión me parece muy extraño. Supongo que solo tienes uno map objetog_waze_map.map) pero por cada devolución de llamada que hagas g_waze_map.map.setCenter(lonlat); dónde lonlat es la latitud longitud del primer resultado. Eso no tiene ningún sentido.

Si llamas a g_waze_map.find son asíncronos, entonces no sabes en qué orden terminarán, así que no tengo idea de por qué quieres setCenter.

Además, ¿por qué no solo:

        g_waze_map.find("<%#Locations[2]%>", find_callback);
g_waze_map.find("<%#Locations[3]%>", find_callback);
g_waze_map.find("<%#Locations[5]%>", find_callback);
// without the quotes, find_callback is a function afterall

0 para la respuesta № 2

Mi solución fue: enviar una matriz de ubicación a g_waze_map.find (); Eso logró mi objetivo, pero todavía no entiendo por qué no funcionó de la manera original.