2013-08-05 45 views
0

我有函数在执行时会从一个值数组在地图上绘制路线。我正在使用谷歌地图 * 方向渲染 *。从我所看到的研究中,为了在地图上呈现多条路线,我需要为阵列中的每条路线创建一个路线渲染JavaScript动态变量命名

我想创建一个数组中的每个路由的方向渲染,所以我决定用索引'i'连接变量的名称。这不起作用。

我创建访问该阵列时,锅点我得到一个错误的路线渲染对象作为数组然而 - 类型错误:不能转换未定义到对象为DirectionsService [I] =新google.maps。为DirectionsService();

如果我创建单独的方向渲染例如, DirectionsRender0,DirectionsRender1,DirectionsRender2 ...这工作正常,但会有一个实例,我不知道有多少方向渲染会有。

下我的代码示例:

function plotRoutes(){ 

    var directionsDisplay = new Array(); 

    for (var i=0; i< startLoc.length; i++){ 

    var rendererOptions = { 
     map: map, 
     preserveViewport:true 
    } 
    directionsService[i] = new google.maps.DirectionsService(); 

    var travelMode = google.maps.DirectionsTravelMode.DRIVING; 

    var request = { 
     origin: startLoc[i], 
     destination: endLoc[i], 
     travelMode: travelMode 
    }; 
     directionsDisplay[i] = new google.maps.DirectionsRenderer(rendererOptions); 

     directionsDisplay[i].setMap(map); 

     directionsService.route(request, function(response, status) { 
     //console.log(response); 

     if (status == google.maps.DirectionsStatus.OK){ 
      console.log(response); 
      directionsDisplay[i].setDirections(response); 

      } 

     }); 
    } 

回答

1

的问题是,所有的回调共享相同的变量“i”,并在他们每个人的价值的“i”将是一个过去调用回调时的点数。

在一个单独的函数来创建你的回调,像这样:

function makeRouteCallback(disp) { 
    return function(response, status) { 
     console.log(response); 
     disp.setDirections(response); 
    }; 
    } 

然后设置回调:

directionsService.route(request, makeRouteCallback(directionsDisplay[i])); 

这保证了API使用的实际回调函数将是正确的你阵列的成员。在回调为时建立了,而不是在实际上时称为。此时,回调函数使用隐藏副本(“disp”),这对每个回调都是私有的。

+0

我仍然收到错误 TypeError:无法将undefined转换为对象 [Break On This Error] directionsService [i] = new google.maps.DirectionsService(); – devdar

+1

@dev_darin你忘了宣布“directionsService”了吗?您发布的代码中没有声明。 – Pointy

+0

对不起,我的错误,我有方向服务[我]而不是只是directionsService不需要调整方向服务的索引。感谢您的帮助和很好的回答。 – devdar