Как я могу удалить все экземпляры / пользовательские объекты, созданные из одного класса? - PullRequest
1 голос
/ 21 августа 2011

Мне нужна помощь с JavaScript и API Карт Google.

У меня есть карта Google Maps на моем веб-сайте, на которой отображаются маркеры, которые, в свою очередь, показывают пользовательский InfoBox при нажатии.

При нажатии на маркер для этого создается новый объект InfoBox:

google.maps.event.addListener(marker, 'click', function() {
    infoBox = new InfoBox({id: id, content: description, latlng: marker.getPosition(), map: map});
});

Когда посетитель нажимает два маркера подряд, он сталкивается с двумя InfoBox с.Я запускаю две строки кода, которые скрывают InfoBox s, когда пользователи щелкают мышью на карте или когда они щелкают крестиком в верхнем правом углу:

google.maps.event.addDomListener(closeImg, 'click', removeInfoBox(this));
google.maps.event.addDomListener(map, 'click', removeInfoBox(this)); 

Я хотел бы, чтобыкогда пользователь нажимает на маркер, все предыдущие маркеры будут скрыты (поэтому после каждого нажатия на маркер будет скрываться только один предыдущий InfoBox).

Я изо всех сил пытаюсь получить этосделанный.Если я создаю DomListener на всех маркерах с событием 'click', я никогда не получаю всплывающее окно InfoBox.Если я поставлю removeInfoBox(this); перед созданием нового объекта InfoBox, мне также никогда не покажут InfoBox.

Где и как будет правильным способом предотвратить появление более одного InfoBox

1 Ответ

4 голосов
/ 27 августа 2011

Я нашел сообщение о том, как удалять маркеры и отслеживать их, которые я мог бы добавить в свой сценарий.

Сначала я объявляю массив для хранения открытых infoBox'ов и функцию для их удаления (clearOverlays ()):

// Declare global array for hiding infowindows
var infowindowsArray = [];

function clearOverlays(){
    if(infowindowsArray){
        for (i in infowindowsArray){
            infowindowsArray[i].setMap(null);
        }
    }
}

Затем, когда я создаю прослушиватель для события нажатия маркера, он добавит новый инфобокс к этому маркеру. Сначала я использую функцию clearOverlays (), чтобы очистить все остальные infoBox'ы. Затем я создаю новый информационный блок и помещаю его в массив:

google.maps.event.addListener(marker, 'click', function() {
    clearOverlays();
    infoBox = new InfoBox({id: id, content: description, latlng: marker.getPosition(), map: map});
    infowindowsArray.push(infoBox);
});

Это решило мою проблему с пользовательскими infoBox'ами.

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