2014-01-14 93 views
0

我已經在JSFiddle中創建了以下測試用例:http://jsfiddle.net/4Wtb3/15/。當我檢查路線A或路線B的複選框時,顯示路線。到目前爲止,這麼好...谷歌地圖Javascript V3:刪除路線,但保持其他路線顯示

if (routes.length > 0) { 
     for (var i = 0; i < routes.length; i++) { 
      var route = routes[i]; 
      var request = { 
       origin: route.origin, 
       destination: route.destination, 
       travelMode: google.maps.TravelMode.WALKING 
      }; 

      var directionsDisplay = new google.maps.DirectionsRenderer({ 
       suppressMarkers: true, 
       preserveViewport: true, 
       polylineOptions: { 
        strokeColor: '#C6D300' 
       } 
      }); 
      directionsDisplay.setMap(map); 
      directionsDisplays.push(directionsDisplay); 

      directionsService.route(request, function (result, status) { 
       if (status == google.maps.DirectionsStatus.OK) { 
        directionsDisplay.setDirections(result); 
       } 
      }); 
     } 
    } 

但是,當我取消它們,我想清除選定的路線。我使用數組跟蹤所有directionDisplay的方向(將地圖值設置爲'null')。首先我清除所有內容,然後重新繪製仍在列表中的每條路線。

問題:路線仍然在地圖上,即使我取消他們...

任何想法的到底是什麼回事?

回答

2

for循環中沒有length數組,因此setMap(null)永遠不會被調用。代碼應該從

if (directionsDisplays.length > 0) { 
     for(var i = 0; i < directionsDisplays; i++) { 
      directionsDisplays[i].setMap(null); 
     } 
    } 

改爲

if (directionsDisplays.length > 0) { 
     for(var i = 0; i < directionsDisplays.length; i++) { 
      directionsDisplays[i].setMap(null); 
     } 
    } 
    ... 

和額外修爲關閉問題:

// Draw all routes 
    if (routes.length > 0) { 
     for (var i = 0; i < routes.length; i++) { 

     (function(i){ 
      var route = routes[i]; 
      var request = { 
       origin: route.origin, 
       destination: route.destination, 
       travelMode: google.maps.TravelMode.WALKING 
      }; 
      .... 

     })(i); 

     } 
    } 

更新example at jsfiddle

+0

正確答案。順便說一下:爲什麼if子句在這裏? – MrUpsidown

+0

這是來自jsfiddle的用戶代碼。我已經在一些書/文章中看到了這種用法,並且人們似乎將它用作一些性能改進。在我看來,如果有正確的循環檢查是完全沒有必要的。 –

+0

好吧,我明白了。同意。 – MrUpsidown

相關問題