异步加载谷歌地图V3时,将数据传递给回调

Bry*_*ing 12 javascript google-maps-api-3

我正在异步加载google maps API,这允许您定义在API加载时执行的回调.有什么方法可以将参数传递给回调吗?

编辑:

这是我正在使用的代码.我有一个名为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);
}
Run Code Online (Sandbox Code Playgroud)

我希望能够传递一系列位置,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 );

}
Run Code Online (Sandbox Code Playgroud)

Bry*_*ing 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: {}
    }
}
Run Code Online (Sandbox Code Playgroud)

我修改了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();


}
Run Code Online (Sandbox Code Playgroud)

我将地图名称存储在地图data-name的占位符元素的属性中.

<div id="map" data-name="mainMap"></div>
Run Code Online (Sandbox Code Playgroud)