js: среда была захвачена при создании функции. Как я могу преодолеть это? - PullRequest
0 голосов
/ 29 августа 2011

Я запускаю следующий скрипт, который выполняет геокодирование:

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));
    };

Когда я вызываю 3 вызова «найти» в пакете (как часть моего JS), я получаю карту только с 3-м пионтом. Когда я вызываю их через консоль Chrome (одну за другой), я получаю карту со всеми тремя точками на ней. Это call_back, который содержит свою среду? Если так, как я могу преодолеть это?

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');

}

Ответы [ 2 ]

0 голосов
/ 31 августа 2011

Мой обходной путь: отправка массива местоположений в g_waze_map.find (); Это достигло моей цели, но я все еще не понимаю, почему это не сработало оригинально.

0 голосов
/ 29 августа 2011

Этот сценарий выглядит очень странно для меня. Я предполагаю, что у вас есть только один map объект (g_waze_map.map), но для каждого обратного вызова вы делаете g_waze_map.map.setCenter(lonlat);, где lonlat - это широта и долгота первого результата. Это не имеет никакого смысла.

Если вы звоните на g_waze_map.find асинхронно, то вы не знаете, в каком порядке они будут заканчиваться, поэтому я понятия не имею, почему вы хотите setCenter.

Кроме того, почему бы просто:

        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
...