Zdarza się, że funkcjonalność, którą udostępniam na stronie jest rozbudowanym modułem JS, ale jednocześnie może nie być w ogóle użyta po załadowaniu strony. Wtedy warto się zastanowić czy ładować kod od razu z całą stroną (co oczywiście wpływa na prędkość ładowania) czy dociągać go dopiero po akcji użytkownika.
Przykładem realizacji wzorca projektowego ładowanie na żądanie, może być dynamiczne ładowanie API Google Map, aby pokazać dany adres na mapie.
W tej chwili Google udostępnia już dynamiczne ładowanie różnych API przy pomocy AJAX API, ale udam, że tego nie ma, gdyż chce pokazać co się dzieje w tle.
Na początek zdefiniuje klasę z konstruktorem init i trzema metodami:
getMap – pobiera API map, loadMap – ładuję mapę i loadPoint – ładuję punkt na mapie.
Jeżeli nie znasz metody bind zapoznaj się z Tu Haczyk IStnieje – ‘this’ cz. I .
W linii 9. konstruktora rejestruję zdarzenie click na grupie linków zawartych w liście o id=”poi”.
var Gmap = {
init: function() {
this.apiKey = 'TWOJ-KLUCZ-G-API';
this.location = '';
this.mapObj = null;
this.mapDiv = $('map');
this.loadMap = this.loadMap.bind(this);
this.loadPoint = this.loadPoint.bind(this);
$$('#poi li > a')
.invoke('observe','click',this.getMap.bind(this));
},
getMap : function(e){
},
loadMap : function() {
},
loadPoint: function(point) {
}
};
document.observe('dom:loaded', Gmap.init.bind(Gmap));