2012-06-20 35 views
11

Tôi là loading the google maps API asynchronously cho phép bạn xác định gọi lại để thực thi khi API tải. Có cách nào tôi có thể vượt qua các đối số để gọi lại?Chuyển dữ liệu để gọi lại khi tải không đồng bộ bản đồ google V3

EDIT:

Dưới đây là đoạn code tôi đang làm việc với. Tôi có một đối tượng toàn cầu được gọi là master lưu trữ các chức năng sau.

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

Tôi muốn có thể chuyển một loạt vị trí vào mapInit để tôi có thể thêm điểm đánh dấu vào bản đồ khi nó được khởi tạo. Tôi cũng muốn có thể truy cập toàn cầu tham chiếu đến bản đồ để tôi có thể sửa đổi bản đồ sau khi tạo bản đồ.

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

} 

Trả lời

4

tôi đã kết thúc làm việc xung quanh sự cần thiết phải vượt qua đối số cho cuộc gọi lại.

Tôi đã tạo một đối tượng bên trong đối tượng master để giữ thông tin về một bản đồ cụ thể. Mỗi bản đồ được xác định lại. Nó cũng giữ tham chiếu đến bản đồ được khởi tạo và bất kỳ dữ liệu cụ thể nào của bản đồ bổ sung cần được tham chiếu bằng cách gọi lại.

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

Tôi đổi mapInit chức năng để lưu trữ các tài liệu tham khảo vào bản đồ và thực hiện gọi lại trong 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(); 


} 

Tôi đã lưu tên bản đồ trong thuộc tính phần giữ chỗ cho bản đồ.

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

Làm thế nào về gói chức năng của bạn vào một số chức năng giả mà đi đối số cần thiết như:

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

và vượt qua wrapper() như một google maps callback

+0

Có lẽ tôi hiểu lầm, nhưng tôi đang cố gắng tránh các cuộc gọi lại khác nhau. –

+0

@Bryan Downing: Tôi hoàn toàn bị mất rồi. Nếu bạn không cần tạo một hàm gọi lại khác, thì "KHÔNG" không có cách nào để chuyển đối số ngay trong url url của bản đồ google – zerkms

+0

Cảm ơn câu trả lời của bạn. Về cơ bản tôi đã đi tuyến đường này, nhưng tôi không muốn có các đối số thực sự bên trong 'wrapper()'. Về cơ bản tôi đã làm những gì bạn đề xuất, nhưng tôi đã lưu trữ một số dữ liệu mà tôi đã chuyển qua làm đối số trên phần tử DOM và một đối tượng có thể truy cập toàn cục riêng biệt. –

Các vấn đề liên quan