2012-06-20 5 views
11

Ich bin loading the google maps API asynchronously, mit denen Sie einen Rückruf definieren können, um beim Laden der API ausgeführt werden. Gibt es eine Möglichkeit, Argumente an den Rückruf zu übergeben?Übergeben Sie Daten an Callback beim asynchronen Laden von Google Maps V3

EDIT:

Hier ist der Code mit ich arbeite. Ich habe ein globales Objekt namens master, das die folgenden Funktionen speichert.

/** 
* 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 eine Reihe von Standorten in mapInit können passieren, so kann ich Markierungen auf der Karte hinzufügen, wenn es initialisiert wird. Ich möchte auch global auf den Verweis auf die Karte zugreifen können, 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); 

} 

Antwort

4

Ich landete arbeiten rund um die Notwendigkeit zu passieren Argumente für den Rückruf.

Ich habe ein Objekt in meinem Objekt master erstellt, um Informationen zu einer bestimmten Karte zu speichern. Für jede Map ist ein eigener Callback definiert. Es enthält auch den Verweis auf die initialisierte Map und alle zusätzlichen kartenspezifischen Daten, auf die der Callback verweisen 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: {} 
    } 
} 

I modifiziert, um die mapInit Funktion die Referenz auf der Karte zu speichern und den Rückruf in master.mapList.mainMap auszuführen.

/** 
* 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 die Karte Namen in einem data-name Attribute auf dem Platzhalter-Elemente für die Karte gespeichert.

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

, wie Sie Ihre Funktion in eine Dummy-Funktion Verpackung, die wie notwendig Argumente übergibt:

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

und übergeben wrapper() als Google Maps Rückruf

+0

Vielleicht bin ich Missverständnis, aber ich versuche zu vermeiden, verschiedene Rückrufe zu haben. –

+0

@Bryan Downing: Ich bin total verloren. Wenn Sie keinen weiteren Wrapper-Callback erstellen müssen, dann "NO" gibt es keine Möglichkeit, Argumente in der Google Maps API URL – zerkms

+0

zu übergeben. Danke für Ihre Antwort. Ich bin im Grunde diesen Weg gegangen, aber ich wollte nicht die eigentlichen Argumente in 'wrapper()' haben. Ich habe grundsätzlich das gemacht, was Sie vorgeschlagen haben, aber ich habe einige der Daten gespeichert, die ich als Argumente für das DOM-Element und ein separates, global zugängliches Objekt übergeben hätte. –

Verwandte Themen