Conflitto tra versioni differenti di jquery

Sono impazzito tutto il giorno dietro del codice javascript che sfrutta anch’esso jquery.

Alla fine della serata ho capito che il problema è legato alla differente versione di jquery.

E così sono ancora una volta qui a chiedere ai maestri una mano

Prima spiego la toppa che ho costruito:

Ho inserito nella view questa linea di codice:


Yii::app()->clientScript->registerScriptFile("http://.../jquery.min.js");

in modo che il codice html diventi così:


<script type="text/javascript" src="/percorso yii/jquery.js"></script>

<script type="text/javascript" src="http://..../jquery.min.js"></script>

<title>titolo ecc. ecc.</title>

se guardo le versioni di jquery, ho:

yii v1.7.1

jquery mini v1.4.2

da cui sono convinto che prima o poi incontrerò dei problemi di conflitto e mi preoccupo.

Cercando in giro sul forum ho letto di gente nella mia situazione che ad esempio lamentava problemi in fase di convalida dei form. E comunque una toppa del genere rende a mio avviso il sistema instabile.

Ho anche letto di una possible soluzione inerente registerCoreScript

ma sinceramente non ho capito

  1. tecnicamente come possa fare a risolvere il conflitto

  2. se possa fare al caso mio

  3. e soprattutto qual’è la riga di codice completa da scrivere e dove inserirla.

un grosso[size=“3”] + [/size]a chi mi aiuta a risolvere l’arcano

jquery.js e jquery.min.js sono i stessi file… non devi usare entrambi… si usa o una o laltro…

la differenza e che il jquery.min.js e stato minimizatto…

Yii automaticmente include il jquery.js durante il sviluppo… e il jquery.min.js per la produzione…

Purtroppo pero’ usando solo jquery.js lo script gia’ fatto che devo utilizzare (una super libreria) funziona male. Ho dovuto aggiungere min.js come workaround :frowning:

Come ti ho appena spiegato e sempre lo stesso file… soltanto diverse versioni…

Se ti serve la versione vecchia allora non si aggiunge… si sostituisce ;)

Pero la miglior cosa sarebbe di vedere che problema ce con questa libreria e cercare di risolverlo.

min non sta per "mini" ma per minified. Significa che il codice è compresso. jquery è una piccola libreria ma richiede comunque di essere scaricata. Questo significa che ogni volta che la si usa bisogna attendere il suo caricamento. Più è grande il file e più tempo ci impiega la pagina ad essere caricata.

Per capire meglio di che si tratta, puoi andare in questo sito: http://jscompress.com/. Puoi incollare del codice javascript, e comprimerlo. Non si tratta di uno .zip o di un .rar. si tratta di eliminare gli spazi per ottenere file meno pesanti:




function ciao () {

    var mondo = 'bello';

}



può essere compresso in


function ciao(){var a="bello"}

Stamani ho ricevuto la mail del fornitore di questa super libreria javascript.

Mi ha detto che entro l’anno dovrebbero sistemarla per funzionare con la nuova release di jquery.

A questo punto in attesa che risolvano, pensavo che un buon compromesso potrebbe essere,

quella di impostare nel controller un parametro per comunicare a yii se usare jquery ver vecchia o jquery ver nuova.

Avete un’idea di dove dovrei mettere mano?

magari potrei costruirmi una patch

Devi editare protected/config/config.php aggiungendo la sezione:

	'clientScript' =&gt; array(


		'packages' =&gt; array(


			'jquery' =&gt; array(


				'baseUrl' =&gt; '/packages/jquery-1.6.3.min',


				'js' =&gt; array(


					'jquery-1.6.3.min.js',


				),


			),


		),








	),&lt;br class=&quot;Apple-interchange-newline&quot;&gt;

… in questo modo redirezioni gli include per jquery sulla versione di jquery che vuoi tu (1.6.3 in questo esempio).

Poi nelle action che usano view che hanno bisogno di jquery devi aggiungere Yii::app()->getClientScript()->registerCoreScript("jquery");

In questo modo Yii usa la tua versione di jquery senza riferirsi a quella preinstallata e anche i tuoi script usano la stessa senza duplicazioni.

Però se uno script ha bisogno di una versione più vecchia di jquery incompatibile con la versione di Yii installato non risolvi, in questo caso non so se c’è soluzione.

ciao