Вопрос по google-maps-api-3, javascript – Передача данных в обратный вызов при асинхронной загрузке карт Google V3

12

язагрузка API карт Google асинхронно который позволяет определить обратный вызов, который будет выполняться при загрузке API. Есть ли способ передать аргументы в обратный вызов?

EDIT:

Вот код, с которым я работаю. У меня есть глобальный объект под названиемmaster хранение следующих функций.

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

Я хочу быть в состоянии передать массив мест вmapInit так что я могу добавить маркеры на карту, когда она будет инициализирована. Я также хотел бы иметь возможность иметь глобальный доступ к ссылке на карту, чтобы я мог изменить карту после ее создания.

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

}

Ваш Ответ

2   ответа
3

которая передает необходимые аргументы, такие как:

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

и передатьwrapper() как обратный вызов Google Maps

Возможно, я неправильно понимаю, но я стараюсь избегать различных обратных вызовов. Bryan Downing
Спасибо за Ваш ответ. Я в основном пошел по этому пути, но я не хотел, чтобы фактические аргументы были внутриwrapper(), Я в основном сделал то, что вы предложили, но я сохранил некоторые данные, которые я бы передал в качестве аргументов для элемента DOM и отдельного глобально доступного объекта. Bryan Downing
@ Брайан Даунинг: я полностью потерян. Если вам не нужно создавать еще один обратный вызов оболочки, тогда "NO" нет способа передать аргументы прямо в URL Google Maps API
5

вызов.

Я создал объект внутриmaster объект для хранения информации о конкретной карте. Каждая карта имеет свой собственный обратный вызов. Он также содержит ссылку на инициализированную карту и любые дополнительные данные, относящиеся к карте, на которые должен ссылаться обратный вызов.

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

Я модифицировалmapInit функция для сохранения ссылки на карту и выполнения обратного вызова вmaster.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();


}

Я сохранил название карты вdata-name атрибут на элемент-заполнитель для карты.

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

Похожие вопросы