2011-10-25 15 views
5

La ricerca non ha rivelato una soluzione alla mia domanda, quindi chiedi qui. Sto usando livequery() per un po 'ora in combinazione con live(). In genere, utilizzo live() per eventi noti come il clic ma utilizzando livequery per l'attivazione su un selettore specifico e l'applicazione di un plug-in. Per esempio ...conversione livequery in live/delegate /?

$('#childDomains').livequery(function() { 
    var element = $(this); 
    element.jqGrid({ 
    // plugin initialization here 
    }); 
}); 

Mi chiedo se c'è un modo per fare la stessa cosa usando dal vivo()/delegato() o qualche altra caratteristica fredda jQuery non so circa. Sto tentando di alleggerire il carico delle dipendenze e ho notato che livequery non è stato aggiornato dal 02-2010.

AGGIORNAMENTO: Credo di non essere abbastanza chiaro. Ho una pagina che utilizza jqGrid e trasforma un elemento TABLE in una griglia di dati Ajax jqGrid. Non si verifica un vero evento di clic per questo. La pagina su cui si trova questa tabella viene caricata tramite ajax e ogni volta che il DOM vede $ ("# childDomains") dovrebbe applicare il plugin jqGrid a quell'elemento. Proprio come sta facendo il mio esempio di livequery.

Dalla mia comprensione fino ad ora, non credo sia possibile senza livequery, ma volevo chiedere di essere sicuro.

risposta

4

No, non esistono modi chiaramente migliori per farlo utilizzando jQuery; Direi che livequery è il metodo migliore al momento.

Detto questo sono altri modi possibili per farlo. Here qualcuno ha eseguito il rolling del proprio codice di polling per rilevare quando un elemento viene inserito nel DOM. Potresti adattare questo, ma per quanto posso vedere, LiveQuery sta già facendo questo per te.

Un altro modo è ascoltare gli eventi DOMNodeInserted come indicato here ma questo è deprecated in the W3C Level 3 Events Specification, a causa di poor performance. È anche not IE compatible.

This question ha una buona discussione sul monitoraggio degli eventi DOMNodeInserted e un'alternativa di aggancio in tutti i metodi che possono modificare il DOM. (È un po 'vecchio, ma dalla mia ricerca non è ancora cambiato nulla).

In conclusione, continuare a utilizzare livequery.

noti inoltre che da jQuery 1.7 .Live() (deprecated), e .delegate() (superseded) dovrebbe essere sostituito con .on() (e .die() con .off()). I nuovi metodi non introducono nulla che possa risolvere la tua dipendenza dal livequery.