异步加载Google Maps V3时如何将数据传递给回调函数?

13
我正在异步加载谷歌地图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);
}

我希望能够将位置数组传递到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个回答

5
我最终绕过了将参数传递给回调函数的需求。在我的“主对象”内创建了一个用于保存特定地图信息的对象。每个地图都定义了自己的回调函数。此对象还保存了初始化的地图引用和任何需要由回调函数引用的其他地图专用数据。
/**
 * 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>

3
如何将您的函数包装在一些虚拟函数中,以传递必要的参数,例如:
function wrapper()
{
    myCallback(arg1, arg2);
}

并将 wrapper() 作为 Google 地图的回调函数传递


也许我误解了,但我正在尝试避免有不同的回调函数。 - Bryan Downing
@Bryan Downing:那我完全迷失了。 如果您不需要创建另一个包装器回调,则“否”,没有办法在Google地图API URL中传递参数。 - zerkms
谢谢你的回答。我基本上走了这条路线,但我不想让实际参数在 wrapper() 内部。我基本上按照你的建议去做了,但我将一些数据存储在 DOM 元素和单独的全局可访问对象上,而不是作为参数传递。 - Bryan Downing

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接