Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript动态变量命名_Javascript_Google Maps_Scope - Fatal编程技术网

JavaScript动态变量命名

JavaScript动态变量命名,javascript,google-maps,scope,Javascript,Google Maps,Scope,我有一个函数,当执行时,它将从一个值数组在地图上绘制路线。我正在使用谷歌地图*方向渲染*。根据我所看到的研究,要在地图上渲染多条路线,我需要为阵列中的每条路线创建一个方向渲染 我正在尝试为数组中的每个路由创建一个方向渲染,因此我决定用索引“I”连接变量的名称。这是行不通的 我创建了方向渲染对象作为数组,但是当访问数组来放置点时,我得到了一个错误-类型错误:无法将未定义的转换为对象方向服务[I]=new google.maps.directionservice() 如果我创建单独的方向渲染,例如D

我有一个函数,当执行时,它将从一个值数组在地图上绘制路线。我正在使用谷歌地图*方向渲染*。根据我所看到的研究,要在地图上渲染多条路线,我需要为阵列中的每条路线创建一个方向渲染

我正在尝试为数组中的每个路由创建一个方向渲染,因此我决定用索引“I”连接变量的名称。这是行不通的

我创建了方向渲染对象作为数组,但是当访问数组来放置点时,我得到了一个错误-类型错误:无法将未定义的转换为对象方向服务[I]=new google.maps.directionservice()

如果我创建单独的方向渲染,例如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);

            }

        });
    }   
函数plotRoutes(){
var directionsDisplay=新数组();
对于(变量i=0;i
问题在于,所有回调都共享同一个变量“i”,在每个变量中,“i”的值都将超过调用回调时的点数

在单独的函数中创建回调,如下所示:

  function makeRouteCallback(disp) {
    return function(response, status) {
      console.log(response);
      disp.setDirections(response);
    };
  }
然后设置回调:

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

这确保API使用的实际回调函数将是数组的正确成员。对“i”的引用在回调建立时计算,而不是在实际调用时计算。此时,回调函数使用隐藏副本(“disp”),它对每个回调都是私有的。

我仍然收到错误类型错误:无法将未定义的转换为对象[Break On This error]DirectionService[i]=new google.maps.DirectionService();@dev\u darin您忘记声明“DirectionService”也许吧?你发布的代码中没有声明。哦,对不起,我犯了一个错误,我使用的是DirectionService[i],而不是DirectionService,不需要在DirectionService上调整索引。谢谢你的帮助和很好的回答。