2012-06-20 9 views
11

मैं loading the google maps API asynchronously हूं जो आपको API लोड होने पर निष्पादित करने के लिए कॉलबैक को परिभाषित करने की अनुमति देता है। क्या कोई तरीका है कि मैं कॉलबैक में तर्क पारित कर सकता हूं?कॉलबैक पर डेटा पास करें जब एसिंक्रोनस Google मानचित्र लोड हो रहा है V3

संपादित करें:

यहाँ कोड के साथ मैं काम कर रहा हूँ है। मेरे पास निम्नलिखित कार्यों को संग्रहीत करने के लिए 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

नक्शे मैं पारित करने के लिए की जरूरत के आसपास काम कर समाप्त हो गया कॉलबैक के लिए तर्क।

मैंने एक विशिष्ट मानचित्र के बारे में जानकारी रखने के लिए अपने 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> 
3

कैसे कुछ डमी समारोह की तरह आवश्यक तर्क गुजरता में अपने समारोह लपेटकर के बारे में:

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

और wrapper() एक गूगल के रूप में पारित कॉलबैक

+0

शायद मैं गलतफहमी कर रहा हूं, लेकिन मैं अलग-अलग कॉलबैक से बचने की कोशिश कर रहा हूं। –

+0

@ ब्रायन डाउनिंग: मैं पूरी तरह से खो गया हूं। यदि आपको एक और रैपर-कॉलबैक बनाने की आवश्यकता नहीं है, तो "नहीं" Google नक्शे API url – zerkms

+0

में तर्कों को पारित करने का कोई तरीका नहीं है आपके उत्तर के लिए धन्यवाद। मैं मूल रूप से इस मार्ग पर गया, लेकिन मैं 'रैपर() 'के अंदर वास्तविक तर्क नहीं चाहता था। मैंने मूल रूप से आपके द्वारा सुझाए गए कार्यों को किया, लेकिन मैंने कुछ डेटा संग्रहीत किया जो मैंने डीओएम तत्व पर तर्क के रूप में पारित किया होगा और एक अलग वैश्विक रूप से सुलभ वस्तु। –

संबंधित मुद्दे