Apelarea de metode multiple pe window.onload

Average: 3.5 (2 votes)

M-am confruntat zilele trecute cu o mic? probleme a c?rei rezolvare s-a dovedit într-un final destul de simpl?.

Problema pe care o aveam de rezolvat a fost ca evenimentul de "onload" s? poat? apela metode multiple. S? presupunem c? avem dou? fi?iere javascript: meniu.js ?i filtre.js.

În fi?ierul meniu.js avem o metod? de genul:

function initMenu() {
  //initializeaza meniul
}

iar în fi?ierul filtre.js:
function initFilters() {
  //initializeaza filtrele 
  //(de exemplu, daca aveti o lista cu judete si una cu orase si doriti sa le sincronizati)
}

Dorim ca la terminarea înc?rc?rii unei pagini HTML (evenimentul window.onload) s? apel?m ambele metode. Cum proced?m?

O solu?ie (cea clasic?) ar fi s? proced?m astfel:

window.onload = function() {
  initMenu();
  initFilters();
}

Solu?ia aceasta devine nepotrivit? când avem de executat multe metode pe onload.

O alt? solu?ie ar fi ca metodele s? fie executate automat, în momentul includerii fi?ierului javascript respectiv. Pentru aceasta avem nevoie de un fi?ier javascript suplimentar. Îl vom numi startup.js:

var __loaders = new Array();
 
function _load() {
    for (var idx = 0; idx < __loaders.length; idx++) {
        var _function_name = __loaders[idx] + '()'; 
        eval(_function_name);
    }
}
 
window.onload = _load;

Acum, fi?ierele meniu.js ?i filtre.js trebuie modificate pu?in:

meniu.js

function initMenu() {
  //initializeaza meniul
}
__loaders.push('initMenu');



filtre.js
function initFilters() {
  //initializeaza filtrele 
  //(de exemplu, daca aveti o lista cu judete si una cu orase si doriti sa le sincronizati)
}
 
__loaders.push('initFilters');



Acum, tot ce mai trebuie f?cut este s? înc?rc?m cele trei fi?iere în pagina HTML dorit?. Aten?ie: este foarte important ca fi?ierul startup.js s? fie inclus înaintea declara?iilor de incluziune ale celorlalte dou? fi?iere (meniu.js ?i filtre.js).


Explica?ii:


  • tabloul global "__loaders" va con?ine toate numele de func?ii care se doresc executate pe window.onload
  • execu?ia metodelor se face prin baleierea tabloului "__loaders" ?i executarea cu ajutorul metodei "eval()" a metodelor înc?rcate