我目前正在开发一个跨平台的应用程序,它有一个谷歌地图,上面有一大堆图标。我使用Ajax查询来获取一个具有lat / lng值列表和对象类别的kendo ui移动数据源。
当用户选择打开该类别时,那些标记将出现在地图上。这当前有效,但删除它们是问题。
当我去删除它们时,我不知道如何删除具有特定标签的所有标记。是否有全局标记数组,我可以迭代以找到要删除的适当标记?
如果有,我可以简单地将这些特定的标记映射到null以删除它们
我添加标记的代码如下:
var dataItem;
var facData = new kendo.data.DataSource({
........
});
facData.fetch(function() {
if (e.checked == 1) {
for (var i = 0;i < facData.view().length;i++) {
dataItem = facData.view()[i];
dataItemLatLng = new google.maps.LatLng(dataItem.lat, dataItem.lon);
createMarker(dataItemLatLng, "Toilets", toiletIcon);
}
}
else {
Code for removing all markers with label "Toilets"
}
})
}
答案 0 :(得分:0)
在某些外部范围内:
var markers = [];
您创建/删除标记的功能:
function foo() {
var facData = new kendo.data.DataSource({
........
});
facData.fetch(function() {
if (e.checked == 1) {
for (var i = 0; i < facData.view().length; i++) {
var dataItem = facData.view()[i];
var dataItemLatLng = new google.maps.LatLng(dataItem.lat, dataItem.lon);
var marker = createMarker(dataItemLatLng, "Toilets", toiletIcon);
markers.push(marker);
}
}
else {
while(markers.length) {
markers.pop().setMap(null);
}
}
});
}
您需要确保createMarker()
返回创建的标记。
如上所述,markers
数组在从地图中删除标记时被清空。这似乎是明智的,否则,下一次循环数组仍然会包含对旧标记的引用以及对所有新标记的引用 - 大多数时候,这意味着从上次相同的数据创建重复标记...等等等等。
答案 1 :(得分:0)
我创建了一个全局数组,每个标记在添加时都会被推入。然后删除代码就是:
for(var i=0; i< markerArray.length;i++){
if(markerArray[i].getTitle()=="Toilets"){
markerArray[i].setMap(null);
}
}