2011-11-02 18 views
6

Possiedo un'applicazione Web MVC 2 che utilizza pagine master. Nelle pagine master, ci sono diversi blocchi già pronti, proprio come quella qui sotto sparsi in tutto il fileCome assicurarsi che jQuery .ready venga eseguito alla fine

$(document).ready(function() { 
    ... 
}); 

Allo stesso modo, molti dei miei punti di vista sono anche più blocchi già pronti sparsi.

Mi è stato chiesto di introdurre un altro blocco pronto nel master che verrà eseguito per ultimo.

La mia domanda è "C'è un modo per garantire che questo nuovo blocco pronto venga eseguito per ultimo?". Il mio pensiero era che se lo mettessi in fondo alla pagina Master, lo farei ma non riesco a convincermi che questo è certo.

+3

Per quanto ne so come funziona, assicurarsi che sia l'ultimo nella pagina dovrebbe essere sufficiente. –

+0

Poiché la pagina Web è "composta" sul server in base alla vista Master e MVC, posso garantire che posizionare $ (document) .ready() alla fine del file Master farà il trucco? – wcm

risposta

5

Questo è il metodo di jQuery .add che è chiamato a spingere richiamata l' tuoi $(document).ready() alla lista di tutte le richiamate:

add = function(args) { 
    var i, length, elem, type, actual; 
    for (i = 0, length = args.length; i < length; i++) { 
     elem = args[ i ]; 
     type = jQuery.type(elem); 
     if (type === "array") { 
      // Inspect recursively 
      add(elem); 
     } else if (type === "function") { 
      // Add if not in unique mode and callback is not in 
      if (!flags.unique || !self.has(elem)) { 
       list.push(elem); 
      } 
     } 
    } 
} 

fonte: jQuery's callback

Quindi: quello che in sostanza non sta spingendo tutti le funzioni all'interno dell'array list e dopo l'evento sono state attivate, chiamarle nello stesso ordine e se la funzione è stata inviata per ultime, verrà chiamata per ultima.

per spingerlo ultimo è possibile dichiarare ancora in testa dopo l'inclusione di tutti gli altri file .js (solo assicurarsi che non ci sono altre $(document).ready() sotto)

+0

Poiché la pagina Web è "composta" sul server in base alla vista Master e MVC, posso garantire che posizionare $ (document) .ready() alla fine del file Master farà il trucco? – wcm

+0

BTW, grazie per aver spiegato e mostrato il codice. – wcm

+0

@wcm Sono abbastanza sicuro che tu possa :) – Teneff

0

Penso che tu possa fare un piccolo trucco qui. come io non conosco il caso esatto che dovrebbe andare bene la vostra soluzione, propongo di aggiungere un ritardo tramite

window.setTimeout(una chiamata al cuntion qui, * tempo di ritardo in millisecondi *);

So che non è così elegante, ma questo è quello che ho pensato, fammi sapere se questo ti ha aiutato, grazie.

1

Ecco un trucco che uso. Nella pagina master, dichiarare

var postReadyEvents = []; 

Poi, nelle pagine figlio, quando si ha un po 'di codice che deve essere eseguito scorso, fare

postReadyEvents.push(function() { 
    ///your stuff - I usually use this to resize a grid or something. 
}); 

Ora, nella pagina master $ (document) .ready(), fare

for(var i = 0; i < postReadyEvents.length; i++) 
{ 
    postReadyEvents[i](); 
} 

Quando si dispone di $ (document) .ready() su entrambe le pagine dei bambini e pagine master, la pagina figlio viene eseguito prima e la pagina master viene eseguito per ultimo. Questo approccio ti dà la possibilità di controllare quando viene eseguito un determinato blocco di codice.

Problemi correlati