js:在创建函数期间捕获了环境。我怎么能克服这个?

时间:2011-08-29 19:11:38

标签: javascript closures geocoding

我正在运行以下执行地理编码的脚本:

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个“find”调用时(作为我的JS的一部分),我得到的地图上只有第3个piont。当我通过chrome控制台(逐个)调用它们时,我得到一张包含全部3点的地图。是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 :(得分:0)

这个脚本对我来说很奇怪。我假设您只有一个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

答案 1 :(得分:0)

我的解决方法是:向g_waze_map.find()发送一个位置数组; 这实现了我的目标,但我还是不明白为什么它不能以原始的方式发挥作用。