如何删除绑定标记的infowindow?

时间:2011-11-22 11:31:40

标签: google-maps-api-3

我按照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>'
        });

3 个答案:

答案 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(和高级语言)开发人员提供了他们可以决定不关心内存管理的印象。这是一个错误。

- Developers at Mozilla

因此,如果你正在寻找infoWindows的内存管理,你可以利用javascript在函数末尾删除变量时的“垃圾收集”。