Простая проблема с динамическими картами Google - PullRequest
0 голосов
/ 27 октября 2011

Я создаю динамическую карту с помощью API Google. Я пытаюсь заставить карту динамически применять информационные поля для каждого маркера ... и я не могу понять это:

http://www.zephyrusdevelopment.com/clients/electrotrack/map2.html

1 Ответ

0 голосов
/ 27 октября 2011

Похоже, вы попали в классическую ошибку loop-plus-closure, которая в упрощенном виде выглядит следующим образом:

while(i<=(a_l-1)) {
    // snip
    var marker = new google.maps.Marker({
        // snip
    });
    google.maps.event.addListener(marker, 'click', function() {
        infowindow.open(map,marker);
    });
    // snip
}

Проблема в том, что из-за способа работы замыканий в Javascriptфункция-обработчик будет сохранять постоянную ссылку на переменную marker даже после того, как она назначена новому объекту.Конечный результат: все ваши обработчики ссылаются на последний объект, назначенный marker.

. Есть несколько способов исправить это;Я обычно использую отдельную функцию для назначения обработчика щелчка, который фиксирует правильный marker объект в области действия обработчика:

function addClickHandler(marker) {
    google.maps.event.addListener(marker, 'click', function() {
        infowindow.open(map,marker);
    });
}

while(i<=(a_l-1)) {
    var marker = new google.maps.Marker({
        // snip
    });
    addClickHandler(marker);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...