Pytanie w sprawie javascript, google-maps-api-3 – Przekazuj dane do wywołania zwrotnego podczas asynchronicznego ładowania map google V3

12

jestemasynchroniczne ładowanie interfejsu API map google co pozwala zdefiniować wywołanie zwrotne do wykonania, gdy API zostanie załadowane. Czy w jakiś sposób mogę przekazać argumenty do wywołania zwrotnego?

EDYTOWAĆ:

Oto kod, z którym pracuję. Mam wywołany obiekt globalnymaster przechowywanie następujących funkcji.

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

Chcę być w stanie przekazać tablicę lokalizacjimapInit więc mogę dodać znaczniki do mapy, gdy zostanie zainicjowana. Chciałbym także mieć globalny dostęp do odniesienia do mapy, dzięki czemu mogę modyfikować mapę po jej utworzeniu.

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

}

Twoja odpowiedź

2   odpowiedź
5

Skończyło się na tym, że musiałem przekazywać argumenty do wywołania zwrotnego.

Stworzyłem obiekt w moimmaster obiekt do przechowywania informacji o konkretnej mapie. Każda mapa ma zdefiniowane własne wywołanie zwrotne. Przechowuje także odniesienie do zainicjalizowanej mapy i wszelkich dodatkowych danych specyficznych dla mapy, do których odwołuje się wywołanie zwrotne.

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

ZmodyfikowałemmapInit funkcja do przechowywania odniesienia do mapy i wykonania wywołania zwrotnegomaster.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();


}

Zapisałem nazwę mapy w adata-name atrybut na elemencie zastępczym mapy.

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

Co powiesz na zawijanie funkcji do jakiejś sztucznej funkcji, która przekazuje niezbędne argumenty, takie jak:

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

i przejśćwrapper() jako wywołanie zwrotne map google

Może nie rozumiem, ale staram się unikać różnych wywołań zwrotnych. Bryan Downing
@Bryan Downing: Jestem wtedy całkowicie zagubiony. Jeśli nie musisz tworzyć kolejnego wywołania zwrotnego, a następnie „NIE”, nie ma sposobu na przekazanie argumentów bezpośrednio w Google Maps URL url zerkms
Dziękuję za odpowiedź. Zasadniczo poszedłem tą drogą, ale nie chciałem mieć rzeczywistych argumentów w środkuwrapper(). Zasadniczo zrobiłem to, co zasugerowałem, ale zapisałem niektóre dane, które przekazałbym jako argumenty na elemencie DOM i oddzielnym globalnie dostępnym obiekcie. Bryan Downing

Powiązane pytania