Google Maps, окно информации о маркере не будет отображаться? - PullRequest
0 голосов
/ 19 апреля 2010

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

var ExpTowerIcon = new GIcon(); 
    ExpTowerIcon.image = "tower.png";
    ExpTowerIcon.iconSize = new GSize(75, 75);
    ExpTowerIcon.iconAnchor = new GPoint(37, 65);
    ExpTowerIcon.infoWindowAnchor = new GPoint(37, 20);


var marker=new Array();

for ( i=0 ; i < lat.length  ; i++ ) {

    var MarkerPoint = new GLatLng(lat[i],long[i]); 
    marker[i] = new GMarker(MarkerPoint,{icon:ExpTowerIcon}) 
    map.addOverlay( marker[i] );

    GEvent.addListener( marker[i] , 'click', function() { marker[i].openInfoWindowHtml('Hello!') ; });

    var polyline = new GPolyline([ new GLatLng(lat[i],long[i]) , new GLatLng(lat[i+1],long[i+1]) ], "#ff0000", 5);
    map.addOverlay(polyline);

    }

Есть идеи? Спасибо!

1 Ответ

3 голосов
/ 19 апреля 2010

Обработчик кликов:

function() { window['marker'+i].openInfoWindowHtml('Hello!') ; }

ссылается на (глобальную) переменную i, которая будет установлена ​​в значение lat.length при выходе из цикла for.

Я предлагаю:

function() { this.openInfoWindowHtml('Hello!') ; }

Edit:

Если вам нужен номер маркера внутри обработчика события click, я предлагаю:

function getHandler(i) {
    return function () { this.openInfoWindow('tower' + i) ; };
}

for (i = 0; i < lat.length; i++) {
    ...
    GEvent.addListener( marker[i] , 'click', getHandler(i));
    ...
}

Это связывает переменную i с обработчиком щелчка (обработчик теперь замыкание ). Подробнее о замыканиях см. Работа с замыканиями - MDC

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