2013-08-05 173 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