Pergunta sobre google-maps-api-3, javascript – Passar dados para o retorno de chamada quando carregar de forma assíncrona o google maps V3

12

eu soucarregando a API do Google Maps de forma assíncrona que permite definir um retorno de chamada para ser executado quando a API é carregada. Existe alguma maneira eu posso passar argumentos para o retorno de chamada?

EDITAR:

Aqui está o código com o qual estou trabalhando. Eu tenho um objeto global chamadomaster armazenar as seguintes funções.

/**
 * Load the Google Maps API
 * https://developers.google.com/maps/documentation/javascript/tutorial#Loading_the_Maps_API
 */
loadGoogleMaps: function(){
    var googleMaps = document.createElement("script");
    googleMaps.type = "text/javascript";
    googleMaps.src = "http://maps.googleapis.com/maps/api/js?key=[MYAPIKEY]&sensor=false&callback=master.mapInit";
    document.body.appendChild(googleMaps);
}

Eu quero ser capaz de passar uma série de locais paramapInit então posso adicionar marcadores ao mapa quando ele for inicializado. Também gostaria de poder acessar globalmente a referência ao mapa para poder modificar o mapa após sua criação.

/**
 * Initialize the map
 */
mapInit: function(){

    // Default map options
    var mapOptions = {
        zoom: 4,
        center: new google.maps.LatLng( 40, -95 ),
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }

    // Create map
    var map = new google.maps.Map( document.getElementById("map"), mapOptions );

}

Sua resposta

2   a resposta
3

Que tal envolver sua função em alguma função fictícia que passa argumentos necessários como:

function wrapper()
{
    myCallback(arg1, arg2);
}

e passewrapper() como um retorno de chamada do Google Maps

Obrigado pela sua resposta. Eu basicamente fui nessa rota, mas eu não queria ter os argumentos reais dentrowrapper(). Basicamente fiz o que você sugeriu, mas armazenei alguns dos dados que eu teria passado como argumentos no elemento DOM e um objeto separado globalmente acessível. Bryan Downing
@Bryan Downing: Estou totalmente perdido então. Se você não precisar criar outro invólucro de retorno de chamada, "NÃO" não será possível transmitir os argumentos diretamente no URL da API do Google Maps zerkms
Talvez eu esteja entendendo mal, mas estou tentando evitar retornos diferentes. Bryan Downing
5

Acabei trabalhando em torno da necessidade de passar argumentos para o retorno de chamada.

Eu criei um objeto dentro do meumaster objeto para armazenar informações sobre um mapa específico. Cada mapa tem seu próprio retorno de chamada definido. Ele também contém a referência ao mapa inicializado e a qualquer dado específico do mapa adicional que precise ser referenciado pelo retorno de chamada.

/**
 * Map listing
 */
mapList: {
    mainMap: {
        map: "",
        callback: function(){

            for( var i = 0, length = this.locations.length; i < length; i++ ){

                master.placeMapMarker( this.locations[i], this );

            }

        },
        prevInfoWindow: "",
        locations: {}
    }
}

Modifiquei omapInit função para armazenar a referência para o mapa e executar o retorno de chamada emmaster.mapList.mainMap.

/**
 * Initialize the map
 */
mapInit: function(){


    // Default map options
    var mapOptions = {
        zoom: 4,
        center: new google.maps.LatLng( 40, -95 ),
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }

    // Create map
    var mapName = $("#map").data("name");
    var map = this.mapList[mapName].map = new google.maps.Map( document.getElementById("map"), mapOptions );

    this.mapList[mapName].callback();


}

Eu armazenei o nome do mapa em umdata-name atributo no elemento de espaço reservado para o mapa.

<div id="map" data-name="mainMap"></div>

Perguntas relacionadas