我按照this的想法编写了一大块Google Maps API代码。
但是,当我删除所有标记时,绑定到这些标记的infowindows不会被删除。
有人能告诉我解决方案吗?
感谢。
这就是我删除标记的方法:
// Deletes all markers in the array by removing references to them
function deleteOverlays() {
if (markersArray) {
for (i in markersArray) {
markersArray[i].setMap(null);
}
markersArray.length = 0;
}
}
markersArray
是一个存储所有标记的全局变量。
我声明了这样的信息:
marker.infowindow = new google.maps.InfoWindow(
{
content: '<div>something here</div>'
});
答案 0 :(得分:3)
你不能将它们与标记一起删除吗?
// Deletes all markers in the array by removing references to them
function deleteOverlays() {
if (markersArray) {
for (i in markersArray) {
markersArray[i].infoWindow.setMap(null);
markersArray[i].infoWindow = null; //this one is not necessary I think nut won't hurt
markersArray[i].setMap(null);
}
markersArray.length = 0;
}
}
答案 1 :(得分:1)
没有任何内容真正被删除,只是标记上的map属性被设置为null。如果您确实要删除标记,可以使用delete operator。
// Deletes all markers in the array by removing them from the array
function deleteOverlays() {
if (markersArray) {
var arrayLength = markersArray.length;
for (var i = 0; i < arrayLength; i++) {
delete markersArray[i];
}
markersArray.length = 0;
}
}
答案 2 :(得分:0)
据Mozilla的开发人员称,delete operator将执行类似于将每个标记实例设置为null的操作。引用的文章邓肯也提到了这一点。
因此,拥有一个infoWindow数组并将它们设置为null应该可以解决问题。与内存管理有关的另一个可能影响你的有趣的事情是
当创建事物(对象,字符串等)时分配JavaScript值,并且当不再使用它们时“自动”释放。后一个过程称为垃圾收集。这种“自动”是混淆的来源,并为JavaScript(和高级语言)开发人员提供了他们可以决定不关心内存管理的印象。这是一个错误。
因此,如果你正在寻找infoWindows的内存管理,你可以利用javascript在函数末尾删除变量时的“垃圾收集”。