我在尝试在地图上绘制两个标记并获得开始和结束坐标时遇到了一些问题。这是代码:
function showBusFilter(){
map.on("click", function (evt) {
var counter = 1;
if(counter == 1){
var startLoc = (evt.mapPoint.x, evt.mapPoint.y);
counter++;
}
else if(counter == 2){
var endLoc = (evt.mapPoint.x, evt.mapPoint.y);
counter = 1;
}
console.log(startLoc);
console.log(endLoc);
plotBusRouteByMarker(startLoc, endLoc);
});
}
我使用计数器变量来区分第一个和第二个标记。所以基本上我要做的是当第一次点击地图时,我得到了startLoc。然后,当地图第二次点击时,我得到了endLoc。在获得它们之后,我将它们作为路由方法的参数传递。
但是,使用这些代码,当我单击地图时,它只是用坐标填充startLoc,使用undefined填充endLoc并执行plotBusRouteByMarker()。
有什么想法吗?
提前致谢。
答案 0 :(得分:2)
这是因为每当您点击地图时,“counter
”变量始终为1,因此每次都会分配startLoc。
你可以帮助闭包概念来记住下面的“counter
”
var counter = 0;
function showBusFilter() {
map.on("click", function(evt) {//anonymous fn
counter ++ ;//now this will point to global counter and hence will not claimed by GC after fn execution
if(counter === 1) {
var startLoc = (evt.mapPoint.x, evt.mapPoint.y);
} else if(counter === 2) {
var endLoc = (evt.mapPoint.x, evt.mapPoint.y);
counter = 0;
}
plotBusRouteByMarker(startLoc, endLoc);
});
}