Google Maps API v3 - передать дополнительную информацию в GeoCode Обратный звонок? - PullRequest
16 голосов
/ 10 августа 2011

Я работаю с Google Maps API v3 для геокодирования адресов. Как передать дополнительную информацию в функцию geocodeCallBack? Смотрите мой код и комментарии ниже, чтобы понять, чего я пытаюсь достичь.

var address = new Array();
address[0] = {name:'Building 1',address:'1 Smith Street'};
address[1] = {name:'Building 2',address:'2 Smith Street'};

for(var rownum=0; rownum<=address.length; rownum++)
{
        if(address[rownum])
                geocoder.geocode( {'address': address[rownum].address}, geocodeCallBack);
}

function geocodeCallBack(results, status)
{
        var marker = new google.maps.Marker({
            map: map,
            position: results[0].geometry.location,
            //how can I also add the name of the building to the title attribute?
            title: results[0].formatted_address
        });
}

1 Ответ

23 голосов
/ 10 августа 2011

Сделать закрытие makeCallback из geocodeCallBack.Закрытие получает и сохраняет rownum:

for (var rownum=0; rownum<=address.length; rownum++) {
    if (address[rownum])
        geocoder.geocode( {'address': address[rownum].address}, makeCallback(rownum));
}

function makeCallback(addressIndex) {
    var geocodeCallBack = function(results, status) {
        var i = addressIndex; 
        alert(address[i].name + " " + results[0].formatted_address);
        var marker = new google.maps.Marker({
            map: map,
            position: results[0].geometry.location,
            // use address[i].name
            title: results[0].formatted_address
        });
    }
    return geocodeCallBack;
}

Конечно, вы также можете сделать закрытие makeCallback(addressName) и передать имя напрямую, но приведенная выше версия с индексом адреса является более общей.

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