删除所有标记后如何执行功能?

时间:2015-10-02 19:01:44

标签: javascript google-maps google-maps-api-3

所以我正在使用此代码将myMarkers放在我的地图上... 该函数从地址字符串和存储多个位置的控制器的基本URL(带名称,lat,lng)获取地址字符串。它会删除标记,点击这些标记会显示一个信息框,我可以从中跳转到该控制器并开始编辑该地点。

// RouteBoxer functions
function route(from, to, url) {
  // Clear any previous route boxes from the map

  if(debug)
    clearBoxes();

  // Convert the distance to box around the route from miles to km
  distance = parseFloat(distance);

  var request = {
    origin: from,
    destination: to,
    travelMode: google.maps.DirectionsTravelMode.DRIVING
  }

  // Make the directions request
  var test = directionService.route(request, function(result, status) {

    if (status == google.maps.DirectionsStatus.OK) {
      directionsRenderer.setDirections(result);

      // Box around the overview path of the first route
      var path = result.routes[0].overview_path;
      var boxes = routeBoxer.box(path, distance);
      if(debug)
        drawBoxes(boxes);

      for(key in boxes)
        {
          var swLat = boxes[key].getSouthWest().lat();
          var swLng = boxes[key].getSouthWest().lng();
          var neLat = boxes[key].getNorthEast().lat();
          var neLng = boxes[key].getNorthEast().lng();

          if(!isNaN(swLat) || !isNaN(swLng) || !isNaN(neLat) ||!isNaN(neLng)) {
            $.ajax({
              url: url,
              type: 'POST',
              dataType: 'json',
              data: {
                swLat: swLat,
                swLng: swLng,
                neLat: neLat,
                neLng: neLng
              },
            })
            .done(function( data ) {
              dropMarkers(data);
              console.log(markers.length);
            })
            .fail(function() {
              //console.log( "error" );
            })
            .always(function() {
              //console.log( "complete" );
            });
          }
        }
    } else {
      alert("Directions query failed: " + status);
    }
  });
}

dropMarkers基本上在地图中设置了漫游者,并将其添加到数组变量var markers = []中。我希望在删除所有标记后执行一些代码,但奇怪的是我无法弄清楚如何执行此操作。我尝试在for循环结束时放置一个alert(‘All markers dropped, No. of markers:’ + markers.length),但它在标记被删除之前提前执行并显示0.我甚至尝试将此放在此路由函数的最后一行之前,并且它给了同样的行为。 console.log(markers.length)然后工作并逐步向我显示标记数组正在填充,所以我正在寻找一种方法来在最后一组标记被删除时调用函数。

我读了另一个堆栈溢出答案,并在我的init()块中尝试了这段代码。

google.maps.event.addListener(directionsRenderer, 'directions_changed',function(){
   if(this.get('directions')){
     alert(‘All markers dropped, No. of markers:’ + markers.length)
   }
  });

这也过早地执行并显示0个标记,即在标记被丢弃之前。删除所有标记后如何调用函数?感谢

1 个答案:

答案 0 :(得分:0)

我能够解决这个问题。将此添加到init函数就可以了。

$( document ).ajaxStop(function() {
  alert(markers.length);
});

逻辑是for循环快速执行并排队了一些ajax请求。这就是为什么在循环结束时添加警报显示为0. ajax请求仅在稍后开始并且标记被删除。当我将async:false添加到ajax块但是阻止了UI时,它工作了,所以我将ajaxStop添加到init块,它解决了这个问题。

希望这有助于任何面临此问题的人。