2010-11-05 12 views
11

faccio lazy loading delle API v3 google maps javascriptcarico pigro mappe google API v3 jQuery richiamata

La documentazione dice di mettere come parametro di callback nell'URL il nome della funzione, che verrà eseguito, quando lo script è caricato.

$(document).ready(function(){ 
    var s = document.createElement("script"); 
    s.type = "text/javascript"; 
    s.src = "http://maps.google.com/maps/api/js?v=3&sensor=true&callback=gmap_draw"; 
    $("head").append(s); 
}); 

Quindi devo definire la funzione gmap_draw().

Quando accludo questa funzione nel blocco domready, non è visibile.

Eventuali soluzioni alternative di questo problema? (eccetto per disattivare la funzione dal blocco domready)

risposta

20

Poiché il callback deve essere globale, è possibile crearne uno accedendo a window dal gestore pronto.

$(document).ready(function(){ 
    var s = document.createElement("script"); 
    s.type = "text/javascript"; 
    s.src = "http://maps.google.com/maps/api/js?v=3&sensor=true&callback=gmap_draw"; 
    window.gmap_draw = function(){ 
     alert ("Callback code here"); 
    }; 
    $("head").append(s); 
}); 
+0

Non c'è modo di inserire un nome di callback namespace? Come hai detto, la funzione di cui sopra è globale, quindi è più leggibile metterlo fuori dal blocco jQuery. Un buon approccio, grazie per aver condiviso – astropanic

+0

Se per callback con namespace intendi la definizione di un callback in un oggetto "myNamespace" (o simile)? –

+0

supponiamo di avere un oggetto gmapsFactory e voglio eseguire un gmapsFactory.init() – astropanic

32

Un'altra opzione è quella di utilizzare Google Loader:

$.getScript('https://www.google.com/jsapi', function() 
{ 
    google.load('maps', '3', { other_params: 'sensor=false', callback: function() 
    { 
     // Callback code here 
    }}); 
}); 
+0

Perfetto per l'utilizzo all'interno di classi personalizzate che caricano lo script. Grazie :) – Archer

+0

Grazie a questo funziona perfetto – Orlando

+0

Salvato il giorno: D – yuva