Закрытие JavaScript с помощью google.maps.Geocoder :: geocode - PullRequest
0 голосов
/ 30 мая 2011

Я использую gav.maps javascript API v3.Мне нужно перевести набор гражданских адресов в маркеры на карте Google с помощью прослушивателей "click".Когда пользователь нажимает на маркер на карте, я хочу, чтобы открылось другое окно с URL-адресом, связанным с этим адресом (другая вкладка была бы идеальной).

Мне не удается сохранить связь между адресоми URL, потому что я использую javascript Closure с методом Google Geocode ().

У меня есть набор адресов, таких как

var addresses = [ '123 street street', '124 street street' ];  
var urls = [ 'www.example.com/1', 'www.example.com/2' ];

Затем я использую API для геокодирования исоздать маркеры на карте

for (var i = 0; i<addresses.length; i++)
{
    var address = addresses[i];
    var url = urls[i];
    geocoder.geocode(
        { 'address' : address },
    function(result, status) {
       var x = url // url == ""

       var marker = new google.maps.Marker({
          position: result[0].geometry.location,
          map: map,
          title:"Test"
       });

       google.maps.event.addListener(marker, 'click', function(event){
          alert(url);
          window.open(url);
       },false);
    }
}

внутри анонимной функции, как я могу использовать var url?

1 Ответ

0 голосов
/ 30 мая 2011

Кажется, что решение было разделить все на отдельные функции.

function showAddress() {

    //geocoder = new Geocoder();

    for (var i = 0; i<addresses.length; i++)
    {
        var address = addresses[i];
        var url = urls[i];

        findAddress(address,url);
        pausecomp(400);
      }
}

function findAddress(address,url)
{
    geocoder.geocode(
        { 'address' : address },
        function(result, status) {
            var marker;
            if(status == google.maps.GeocoderStatus.OK) {
                marker = new google.maps.Marker({
                    position: result[0].geometry.location,
                    map: map,
                    title:"Longueuil"
                });

            }
            attachUrl(marker, url);
        }
    );
}

function attachUrl(marker, url)
{
    google.maps.event.addListener(marker, 'click', function(event){
        alert(url);
        window.open(url);
    },false);
}

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

...