Pregunta

Estoy usando requestjs por primera vez en un proyecto. Estoy trabajando en un entorno que ya tiene mucho JavaScript, y estoy buscando formas limpias de presentar mi propio código.

El problema que tengo es que parece que no puedo encontrar un módulo de jQuery que pueda cargar que no golpee la jQuery existente.

Me sorprendió que incluso Requend-Jquery.js presente una versión global de jQuery. ¿Hay alguna forma de cargar jQuery como módulo sin introducir globales?

¿Fue útil?

Solución

JQuery 1.7 admite la carga AMD. Pero, el truco es evitar un conflicto de nombres de módulos, ya que jQuery codifica su propio nombre del módulo como 'jQuery'. Si está definiendo otro módulo como 'jQuery' (digamos, en la propiedad de 'rutas' en su configuración de requisitos), causará dicho conflicto.

Para cargar jQuery en su alcance de la aplicación requerida, defina un módulo, como 'jQuery-Loader' y cuando desee cargar jQuery, hágalo a través de 'jQuery-Loader':

define(['path/to/jquery.min'], function () {
    return jQuery.noConflict(true);
});

Requestjs 'almacenará' su referencia a jQuery para que nofonflict solo ejecute la primera vez que se cargue jQuery-Loader.

Otros consejos

Múltiples versiones de jQuery en una página son malas. Deje de piratear y actualice jQuery o use la versión anterior.

En cuanto a mantener $ intento seguro

(function($) {
    // requirejs inclusion block for loading


}(jQuery.noConflict(true));

Si pasas true a .noConflict reemplazará el viejo jQuery variable y no destruir eso globalmente.

Esto significa que puedes pasarlo en silencio. Di que tienes

<script src="jquery-1.2">
<script src="jquery-1.5">

Luego, usar el código anterior pondría el 1.2 $ & jQuery Volver en el espacio global y darle la 1.5 jQuery como local $ En tu cierre

De nuevo aconsejo De nuevo Usando múltiples versiones porque es un desastre correcto y una pesadilla de mantenimiento.

Si está usando 1.5, también puede usar .sub para permitirte extender jQuery localmente sin corromper el global jQuery

Cargue el script jQuery y luego use var myJ = jQuery.noConflict();

o cualquier variable de acceso directo que desee

http://docs.jquery.com/using_jquery_with_other_libraries

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top