2011-10-05 13 views
5

Sto utilizzando le interfacce 3_3_3.Finale e non voglio usare l'ultima versione di jQuery http://code.jquery.com/jquery-latest.pack.js, ma sembra che abbia dei conflitti.Cambiare la versione di JQuery utilizzata nelle ricchezze

RichFaces già caricare una versione jQuery (strega non è la versione adatta, sembra essere 1.3.2):

<script type="text/javascript" src="/project/a4j/g/3_3_3.Finalorg/richfaces/renderkit/html/scripts/jquery/jquery.js.jsf"> 

Posso utilizzare la versione più recente per il mio processo di Javascript, e permettere di utilizzare la sua RichFaces la propria versione e come?

jQuery.noConflict() è una buona area di ricerca?

+0

@Moin Zaman [questo post] (http://stackoverflow.com/questions/3881953/how-do-i-use-the-latest-version-of-jquery-and-get-back-the-for -jquery-in-rich) dice che possiamo usare più versioni di jQuery fianco a fianco, ma non dire come. –

risposta

6

Sì, jQuery.noConflict è un buon inizio, ma dal momento che l ' "altro libreria" si sta utilizzando è anche jQuery, ci sarà probabilmente complicazioni.

Quando si carica jQuery, definisce $ e jQuery come variabili globali. L'utilizzo di .noConflict "rinuncerà al controllo della variabile $", ovvero qualsiasi sia lo stato $, verrà impostato nuovamente. Se v1.3.2 viene caricato per primo e si carica l'ultimo pacchetto (1.6.4 come al momento) successivo, .noConflict farà riferimento a v1.3.2 $ ma si riferirà ancora a 1.6.4.

In sostanza, è necessario eseguire il jias alias prima di caricare l'ultimo pacchetto. See my fiddle used to simulate your situation (incollato anche in basso).

<script type="text/javascript"> 
    //alias v.1.3.2 
    var $132 = $; 
</script> 
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.pack.js"></script> 
<script type="text/javascript"> 
    //alias v1.6.4 
    var $164 = $, jQuery164 = $; 

    //reset original variables to v1.3.2 
    $ = jQuery = $132; 

    console.log("v1.3.2: ", $().jquery, jQuery().jquery) 
    console.log("v1.6.4: ", $164().jquery, jQuery164().jquery) 

    $('div')  //selected using v1.3.2 
    $164('div') //selected using v1.6.4 
</script> 

Dopo il caricamento 1.6.4, è necessario alias e impostare $ e jQuery di nuovo ai 1.3.2 oggetti. Questo non usa .noConflict perché essenzialmente fa la stessa cosa. RichFaces continuerà a funzionare utilizzando 1.3.2 e scriverà il tuo codice contro la versione 1.6.4 con alias. Nel mio caso, ciò significa utilizzare $164 invece di utilizzare $. Spero che abbia un senso. Sono sicuro che il violino sarà più chiaro.


Infine, è bene sviluppare codice utilizzando jquery-latest.pack.js ma non si dovrebbe mai usare quello sul vostro sito di produzione. Il motivo è perché ad un certo punto in futuro, jQuery verrà aggiornato. Se stai caricando l'ultimo pacchetto, quegli aggiornamenti potrebbero interrompere la funzionalità del tuo sito senza che tu te ne accorga. È più sicuro scegliere una versione e attenervisi, eseguendo l'upgrade solo quando confermi che il tuo sito continuerà a funzionare correttamente.

+0

Capisco la risposta ma non riesco a implementare la soluzione. C'è un conflitto con Richfaces (i dati estesi non possono essere visualizzati) –

+0

Sembra che si tratti di un problema diverso da quello che hai menzionato in origine, o almeno non vedo la connessione. Come stai includendo RichFaces e jQuery? – Jeff

+0

Il mio progetto utilizza JSF1.2/Richfaces (con Maven). Quando provo a includere un'altra versione di jQuery, aggiungo '

Problemi correlati