Pregunta sobre google-maps-api-3, javascript – Pase los datos a la devolución de llamada cuando se carga de forma asíncrona google maps V3

12

yo soycargando la API de google maps de forma asíncrona lo que le permite definir una devolución de llamada para ejecutar cuando se carga la API. ¿Hay alguna manera de pasar argumentos a la devolución de llamada?

EDITAR:

Aquí está el código con el que estoy trabajando. Tengo un objeto global llamadomaster Almacenando las siguientes funciones.

/**
 * 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);
}

Quiero poder pasar una serie de ubicaciones amapInit así que puedo agregar marcadores al mapa cuando se inicializa. También me gustaría poder acceder globalmente a la referencia al mapa para poder modificar el mapa después de su creación.

/**
 * 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 );

}

Tu respuesta

2   la respuesta
3

¿Qué tal si envuelve su función en alguna función ficticia que pasa los argumentos necesarios como:

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

y pasarwrapper() como un callback de google maps

Gracias por tu respuesta. Básicamente fui por esta ruta, pero no quería tener los argumentos reales dentrowrapper(). Básicamente hice lo que sugeriste, pero almacené algunos de los datos que habría pasado como argumentos en el elemento DOM y un objeto separado accesible a nivel mundial. Bryan Downing
Tal vez no entiendo bien, pero estoy tratando de evitar tener diferentes devoluciones de llamadas. Bryan Downing
@Bryan Downing: Estoy totalmente perdido entonces. Si no necesita crear otro wrapper-callback, entonces "NO" no hay forma de pasar argumentos directamente en la URL de la API de Google Maps. zerkms
5

Terminé trabajando alrededor de la necesidad de pasar argumentos a la devolución de llamada.

Creé un objeto dentro de mimaster objeto para contener información sobre un mapa específico. Cada mapa tiene su propio callback definido. También contiene la referencia al mapa inicializado y cualquier dato específico del mapa adicional que deba ser referenciado por la devolución de llamada.

/**
 * 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: {}
    }
}

Modifiqué elmapInit Función para almacenar la referencia al mapa y ejecutar la devolución de llamada enmaster.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();


}

Guardé el nombre del mapa en unadata-name atributo en el elemento marcador de posición para el mapa.

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

Preguntas relacionadas