所以我正在使用此代码将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个标记,即在标记被丢弃之前。删除所有标记后如何调用函数?感谢
答案 0 :(得分:0)
我能够解决这个问题。将此添加到init函数就可以了。
$( document ).ajaxStop(function() {
alert(markers.length);
});
逻辑是for循环快速执行并排队了一些ajax请求。这就是为什么在循环结束时添加警报显示为0. ajax请求仅在稍后开始并且标记被删除。当我将async:false添加到ajax块但是阻止了UI时,它工作了,所以我将ajaxStop添加到init块,它解决了这个问题。
希望这有助于任何面临此问题的人。