Как удалить информационное окно, связанное с маркером? - PullRequest
1 голос
/ 22 ноября 2011

Я написал фрагмент кода Google Maps API, следуя этой идее.

Но когда я удаляю все маркеры, информационные окна, связанные с этими маркерами, не удаляются.

Может кто-нибудь показать мне решение?

Спасибо.

Вот как я удаляю маркеры:

// 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 ]

3 голосов
/ 24 ноября 2011

вы не можете просто удалить их вместе с маркерами?

// 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 голос
/ 24 ноября 2011

Ничего действительно не удаляется, просто свойство карты на маркере устанавливается в нуль. Если вы действительно хотите удалить маркеры, вы можете использовать оператор delete .

// 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;
  }
}
0 голосов
/ 27 ноября 2013

По словам разработчиков из Mozilla, оператор delete сделает что-то похожее на установку нуля для каждого экземпляра маркера. В цитируемой статье Дункан также упоминается об этом.

Следовательно, наличие массива infoWindow и установка его в null должны помочь. Другая интересная вещь, которая может повлиять на вас и связанная с управлением памятью, заключается в том, что

Значения JavaScript распределяются, когда вещи (объекты, строки и т. Д.) Создаются и «автоматически» освобождаются, когда они больше не используются. Последний процесс называется сборкой мусора. Это «автоматически» является источником путаницы и дает разработчикам JavaScript (и языкам высокого уровня) впечатление, что они могут решить не заботиться об управлении памятью. Это ошибка.

- Разработчики в Mozilla

Так что, если вы ищете управление памятью для infoWindows, вы можете воспользоваться преимуществами javascript «сборки мусора», когда он удаляет переменные в конце функций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...