Подтвердить что ты не робот

Передача данных для обратного вызова при асинхронной загрузке карт Google V3

Я анимически загружаю 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 );

}
4b9b3361

Ответ 1

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

Я создал объект внутри моего объекта 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>

Ответ 2

Как обернуть вашу функцию в какую-нибудь фиктивную функцию, которая передает необходимые аргументы вроде:

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

и передать wrapper() в качестве обратного вызова карт Google