Frage an google-maps-api-3, javascript – Übergeben Sie Daten an Callback, wenn Sie Google Maps V3 asynchron laden

12

ich binLaden Sie die Google Maps API asynchron Hiermit können Sie einen Rückruf definieren, der beim Laden der API ausgeführt wird. Gibt es eine Möglichkeit, Argumente an den Rückruf zu übergeben?

BEARBEITEN:

Hier ist der Code, mit dem ich arbeite. Ich habe ein globales Objekt namensmaster Speichern der folgenden Funktionen.

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

Ich möchte in der Lage sein, eine Reihe von Orten zu übergebenmapInit So kann ich der Karte Markierungen hinzufügen, wenn sie initialisiert wird. Ich möchte auch in der Lage sein, global auf den Verweis auf die Karte zuzugreifen, damit ich die Karte nach ihrer Erstellung ändern kann.

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

}

Deine Antwort

2   die antwort
5

Am Ende habe ich die Notwendigkeit umgangen, Argumente an den Rückruf zu übergeben.

Ich habe ein Objekt in meinem erstelltmaster Objekt zum Speichern von Informationen zu einer bestimmten Karte. Für jede Map ist ein eigener Callback definiert. Es enthält auch den Verweis auf die initialisierte Karte und alle zusätzlichen kartenspezifischen Daten, auf die vom Rückruf verwiesen werden muss.

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

Ich habe das geändertmapInit Funktion zum Speichern des Verweises auf die Karte und Ausführen des Rückrufs inmaster.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();


}

Ich habe den Kartennamen in a gespeichertdata-name Attribut auf dem Platzhalterelement für die Karte.

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

Wie wäre es, wenn Sie Ihre Funktion in eine Dummy-Funktion einbinden, die die erforderlichen Argumente übergibt, wie zum Beispiel:

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

und weitergebenwrapper() als google maps callback

@ Bryan Downing: Ich bin dann total verloren. Wenn Sie keinen weiteren Wrapper-Callback erstellen müssen, können Sie mit "NO" keine Argumente direkt in die URL der Google Maps-API übergeben zerkms
Danke für deine Antwort. Ich bin im Grunde genommen diesen Weg gegangen, aber ich wollte nicht die tatsächlichen Argumente in mir habenwrapper(). Grundsätzlich habe ich getan, was Sie vorgeschlagen haben, aber ich habe einige der Daten, die ich als Argumente für das DOM-Element übergeben hätte, und ein separates global zugängliches Objekt gespeichert. Bryan Downing
Vielleicht habe ich ein Missverständnis, aber ich versuche, unterschiedliche Rückrufe zu vermeiden. Bryan Downing

Verwandte Fragen