Usa Requisitijs e JQuery, senza tagliare JQuery globale?
Domanda
Sto usando Requisitejs per la prima volta su un progetto. Sto lavorando in un ambiente che ha già in atto molti JavaScript e sto cercando modi puliti per introdurre il mio codice.
Il problema che sto riscontrando è che non riesco a trovare un modulo di jQuery che posso caricare che non ravviva JQuery esistente.
Sono stato sorpreso dal fatto che anche Requisito-JQuery.js introduca una versione globale di jQuery. C'è un modo per caricare jQuery come modulo senza introdurre globali?
Soluzione
JQuery 1.7 supporta il caricamento AMD. Ma il trucco sta evitando un conflitto di denominazione del modulo, dal momento che JQuery hardcode il proprio nome del modulo come "jQuery". Se stai definendo un altro modulo come "jQuery" (diciamo, nella proprietà "Paths" nella configurazione di Requisitijs), causerà tale conflitto.
Per caricare jQuery nell'ambito dell'applicazione Requisitijs, definire un modulo, come "jQuery-carder" e quando si desidera caricare jQuery, fallo tramite "jQuery-carler":
define(['path/to/jquery.min'], function () {
return jQuery.noConflict(true);
});
Requisitijs "cache" il tuo riferimento a jQuery in modo che Noconflict esegui solo la prima volta che viene caricato JQuery-caricatore.
Altri suggerimenti
Più versioni di jQuery su una pagina sono cattive. Smetti di hackerare e aggiornare jQuery o utilizzare la versione precedente.
Per quanto riguarda il consumo $
prova sicuro
(function($) {
// requirejs inclusion block for loading
}(jQuery.noConflict(true));
Se passi true
a .noConflict
Sostituirà il vecchio jQuery
variabile e non distruggerlo a livello globale.
Ciò significa che puoi passarlo in silenzio. Dì che hai
<script src="jquery-1.2">
<script src="jquery-1.5">
Quindi l'uso del codice sopra metterebbe l'1.2 $
& jQuery
Di nuovo nello spazio globale e darti la 1.5 jQuery come locale $
Nella tua chiusura
Ancora una volta consiglio Di nuovo Usando più versioni perché è un casino giusto e un incubo di manutenzione.
Se si utilizza 1.5 puoi anche usare .sub
Per consentirti di estendere jQuery
a livello locale senza corrompere il globale jQuery
caricare lo script jQuery e quindi utilizzare var myJ = jQuery.noConflict();
o qualunque variabile di scelta rapida tu voglia