Google Maps API - Не удается получить данные информационного окна для правильной загрузки - PullRequest
0 голосов
/ 13 декабря 2008

У меня есть этот код, который генерирует рынки. Я хочу, чтобы во всплывающем окне с информацией всплывала информация.

for (i = 0; i < marker_array.length; i++) {
    var point = new GLatLng(marker_array[i][0], marker_array[i][1]);
    var marker = new GMarker(point, markerOptions);

    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(html_data);
        });
    map.addOverlay(marker);
    }

Проблема в том, что кликать можно только на одном рынке. Независимо от того, по какому клику щелкают, над этим одним кликабельным маркером появляется информационное окно с данными одного кликабельного маркера. Все маркеры загружаются и находятся в правильных местах, поэтому проблема заключается только в том, чтобы данные всплывающего окна отображались для каждого из них.

Я проверил раздел о "развертывании" функции маркера. здесь , и, похоже, я ошибаюсь, но я не смог заставить это работать через тестирование изменения, которые они предлагают.

Ответы [ 4 ]

1 голос
/ 18 декабря 2008

Я считаю, что ваша проблема в том, что переменная html_data одинакова для всех итераций этого цикла. Вы должны обновлять эту переменную при каждом проходе в цикле, чтобы значения были разными.

0 голосов
/ 29 ноября 2009

Я нашел такой же случай, и у меня есть решение этой проблемы. Я предлагаю вам создать собственный класс, расширяющий класс Marker. В этом пользовательском классе вы должны создать конструктор, который имеет параметры для ваших данных, и у этого класса также должна быть своя собственная переменная информационного окна, которая будет вызываться из вашего основного приложения. Например:

Пользовательский класс:

public class StoreSpot extends Marker
{  
    public var infoWindow:InfoWindowOptions;
    public var store_id:String;
    public var address:String;
    public var name:String;
    ...
}

Основное применение:

tempMarker = new StoreSpot(
    tempLatlng,
    new MarkerOptions({
        icon:new spotStore(), 
        iconAlignment:MarkerOptions.ALIGN_HORIZONTAL_CENTER,
        iconOffset:new Point(0,-50)
    }),
    temp.store_id,
    temp.name,
    temp.address,
    temp.detail
);

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

0 голосов
/ 13 декабря 2008

Я использовал массив, который соответствует моим данным маркера для моего HTML, и он хорошо работает:

function createMarker(posn, title, icon, i) {
    var marker = new GMarker(posn, {title: title, icon: icon, draggable:false});
    GEvent.addListener(marker, 'mouseover', function() { 
        map.closeInfoWindow()
        marker.openInfoWindowHtml(infoText[i])

     } );   
    return marker;
}
0 голосов
/ 13 декабря 2008

Я не совсем уверен, следую ли я, но вы говорите, что во всех всплывающих окнах есть одинаковые данные?

Я думаю, что это проблема, и это потому, как работают слушатели событий. Когда происходит функция щелчка, она оценивает событие слушателя. Таким образом, HTML-код, который вы показываете, всегда один и тот же, поскольку переменная всегда перезаписывается.

...