12

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

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

}
4

2 に答える 2

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>
于 2012-06-21T06:36:14.030 に答える
3

次のような必要な引数を渡すダミー関数に関数をラップするのはどうですか。

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

wrapper()Googleマップのコールバックとして渡します

于 2012-06-20T22:25:33.820 に答える