web-dev-qa-db-fra.com

Problème le plus courant et non résolu lors de l'utilisation de jquery dans les extensions J2.5

Dans joomla 2.5, les gens posent des problèmes avec jquery lorsqu'il existe différentes extensions dans une page. La question est en tant que développeur d’extension, comment utiliser jquery dans une extension j2.5, étant donné que d’autres extensions déclarent également des codes jquery file et jquery no-conflict et que certains développeurs ne s’y intéressent pas ou ne le savent pas et ne l'utilisent pas jquery à leur manière, donc jquery ne fonctionne pas en extension.

Maintenant, je devrais vérifier jfactory-> getapplication-> get ('jquery') mais ce n'est pas suffisant comme je l'ai mentionné ci-dessus.Alors parmi ce qui suit est la bonne façon d'utiliser jquery déclarant le fichier de script jquery (comme je l'ai dit plus haut, pourquoi devrais-je déclarer) -

  1. nc_mode = jQuery.noConflict (); nc_mode (function () {......});
  2. jQuery.noConflict (); jQuery (function () {....});
  3. Utiliser uniquement jQuery - jQuery (function () {....});

Il est vraiment nécessaire de le résoudre correctement car l'utilisation de jquery est très courante dans les extensions.

1
dev-m

noConflict est utilisé de sorte que l'alias utilisé lors de la déclaration de fonctions entre en conflit avec d'autres bibliothèques. Joomla utilise Mootools (progressivement supprimé du noyau), qui présente des problèmes de conflit majeurs avec jQuery aussi bien en tant que $ alias pour déclarer des fonctions comme ceci:

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

Pour mieux comprendre et approfondir noConflict, lisez ce qui suit, qui vous donnera également des exemples d'utilisation:

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

Pour importer jQuery dans des extensions, c’est un peu délicat. Après avoir lu votre commentaire sur l'une de mes réponses précédentes, vous savez parfaitement qu'il existe différentes manières d'importer jQuery. Assurer qu'une seule instance de celle-ci est importée est possible, mais il est possible que certains problèmes se produisent.

Lorsque vous faites cela pour votre propre site, je vous recommanderais simplement d'utiliser jQuery Easy qui est un plugin. Une des caractéristiques principales est qu'il supprime toutes les autres instances de jQuery afin qu'il ne soit pas importé plusieurs fois.

Lorsque vous écrivez votre propre extension que vous souhaitez mettre à la disposition du public, en tant que développeur, la recherche sur ce sujet est la première chose à faire. Détecter si jQuery a déjà été chargé, puis l'importer ne fonctionne que si d'autres extensions utilisent cette même méthode, comme vous l'avez mentionné dans votre question. Le problème, c’est que rien n’est jamais parfait et que vous rencontrerez toujours des problèmes dans lesquels certaines extensions sont écrites correctement et d’autres pas, il y aura donc toujours une possibilité de conflit. Pour éviter cela, la seule façon de penser consiste à examiner le code de jQuery Easy et à voir comment ils suppriment d'autres instances de jQuery et à essayer de le faire vous-même.

Mettre à jour

Vous n'avez pas à utiliser jQuery comme alias pour tout. Nous sommes bien sûr tous habitués à utiliser $ mais en fait, jQuery est l’alias par défaut. Donc, un bon moyen de contourner tout est de l’encapsuler de la manière suivante:

jQuery.noConflict();

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

A partir de là, vous pouvez continuer à utiliser $ comme alias de portée locale.

2
Lodder