it-swarm.dev

Problema più comune e irrisolto quando si utilizza jquery nelle estensioni J2.5

In joomla 2.5 le persone chiedono problemi su jquery quando ci sono varie estensioni in una pagina. La domanda è come sviluppatore di estensioni come possiamo usare jquery nell'estensione j2.5 ??, considerando che altre estensioni dichiarano anche i file jquery e i codici jcery di non conflitto e ci sono alcuni sviluppatori che non se ne preoccupano o non sanno e usano jquery a modo suo, quindi jquery non funziona in estensione.

Ora dovrei controllare jfactory-> getapplication-> get ('jquery') ma non è abbastanza come ho detto sopra. Quindi tra i seguenti è il modo giusto di usare jquery dichiarando il file di script jquery (come ho detto sopra perché dovrei dichiarare) -

  1. nc_mode = jQuery.noConflict (); nc_mode (function () {......});
  2. jQuery.noConflict (); jQuery (function () {....});
  3. Utilizzando solo jQuery - jQuery (function () {....});

È molto necessario risolverlo nel modo giusto perché l'uso di jquery è molto comune nelle estensioni.

1
dev-m

noConflict viene utilizzato in modo che l'alias utilizzato durante la dichiarazione di funzioni si scontrino con altre librerie. Joomla utilizza Mootools (che viene gradualmente rimosso dal nucleo) che presenta importanti problemi di conflitto con jQuery sia come $ alias per dichiarare le funzioni in questo modo:

$('button').click(function() { ...

Per una migliore e più approfondita comprensione di noConflict, leggi quanto segue che ti fornirà anche esempi di utilizzo:

http://api.jquery.com/jquery.noconflict/

Per quanto riguarda l'importazione di jQuery nelle estensioni, questo è un po 'complicato. Dopo aver visto il tuo commento su una mia precedente risposta, sei pienamente consapevole che esistono diversi modi per importare jQuery. Garantire che sia importata solo 1 istanza è possibile, ma si potrebbero verificare alcuni problemi.

Quando lo fai per il tuo sito, ti consiglio semplicemente di usare jQuery Easy che è un plugin. Una caratteristica principale è che elimina tutte le altre istanze di jQuery in modo che non venga importato più volte.

Quando si scrive la propria estensione che si desidera rendere disponibile al pubblico, come sviluppatore, la ricerca su questo argomento è la prima cosa da fare. Rilevare se jQuery è già stato caricato e quindi importarlo funziona solo se altre estensioni utilizzano lo stesso metodo menzionato nella domanda. Il problema è che nulla è mai perfetto e ti imbatterai sempre in problemi in cui alcune estensioni sono scritte correttamente e altre no, quindi ci sarà sempre la possibilità di conflitti. L'unico modo in cui posso effettivamente pensare di evitarlo è guardando il codice per jQuery Easy e vedendo come si spogliano altre istanze di jQuery e provando a farlo da soli.

Update

Non devi usare jQuery come alias per tutto. Ovviamente siamo tutti abituati a usare $ ma di fatto jQuery è l'alias predefinito. Quindi un buon modo per aggirare tutto è incapsularlo in questo modo:

jQuery.noConflict();

jQuery(document).ready(function($) {
    $("element").hide();
    // more code using $
});

Da qui in poi, puoi continuare usando $ come alias con ambito locale.

2
Lodder