2011-10-05 17 views
5

Estoy usando richfaces 3_3_3.Final, y no quiero usar la última jQuery http://code.jquery.com/jquery-latest.pack.js, pero parece que tiene conflictos.Cambiar la versión de JQuery utilizada en richifaces

RichFaces ya cargar una versión de jQuery (bruja no es la versión adecuada, parece ser 1.3.2):

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

¿Puedo usar la versión más reciente de mi proceso de Javascript, y permitir RichFaces para utilizar su propia versión, y cómo?

¿Es jQuery.noConflict() una buena área de investigación?

+0

@Moin Zaman [Esta publicación] (http://stackoverflow.com/questions/3881953/how-do-i-use-the-latest-version-of-jquery-and-get-back-the-for -jquery-in-rich) nos dice que podemos usar varias versiones de jQuery una al lado de la otra, pero no dice cómo. –

Respuesta

6

Sí, jQuery.noConflict es un buen comienzo, pero como la "otra biblioteca" que está utilizando también es jQuery, probablemente haya complicaciones.

Cuando carga jQuery, define $ y jQuery como variables globales. El uso de .noConflict "abandonará el control de la variable $", es decir, lo que sea $ antes, se establecerá de nuevo. Si v1.3.2 se carga primero y carga el paquete más reciente (1.6.4 a partir de ahora), .noConflict hará $ consulte v1.3.2 pero jQuery se referirá a 1.6.4.

Básicamente, necesita alias jQuery antes de cargar el último paquete. See my fiddle used to simulate your situation (también pegado a continuación).

<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> 

Después de la carga 1.6.4, es necesario poner un alias, y lo pondrá $ y jQuery de nuevo a los objetos 1.3.2. Esto no usa .noConflict porque esencialmente hace lo mismo. RichFaces continuará trabajando con 1.3.2 y escribirá su código en contra de la versión 1.6.4 de alias. En mi violín, eso significa usar $164 en lugar de usar $. Espero que tenga sentido. Estoy seguro de que el violín será más claro.


Por último, está bien para desarrollar código usando jquery-latest.pack.js pero no se debe utilizar nunca que en su sitio web de producción. La razón es porque en algún momento en el futuro, jQuery se actualizará. Si está cargando el último paquete, esas actualizaciones pueden interrumpir la funcionalidad de su sitio sin siquiera saberlo. Es más seguro elegir una versión y atenerse a ella, solo actualizando solo cuando confirmes que tu sitio seguirá funcionando correctamente.

+0

Entiendo la respuesta pero no puedo implementar la solución. Existe un conflicto con Richfaces (no se pueden mostrar las tablas extendidas) –

+0

Parece que es un problema diferente al que mencionaste originalmente, o al menos no veo la conexión. ¿Cómo está incluyendo RichFaces y jQuery? – Jeff

+0

Mi proyecto usa JSF1.2/Richfaces (con maven). Cuando pruebo para incluir otra versión de jQuery, agrego '

Cuestiones relacionadas