JeuWeb - Crée ton jeu par navigateur
[Jquery/Jquery-ui] Gestion des espaces de noms (namespaces) - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Jquery/Jquery-ui] Gestion des espaces de noms (namespaces) (/showthread.php?tid=4077)



[Jquery/Jquery-ui] Gestion des espaces de noms (namespaces) - Shao - 17-10-2010

Bonjour à tous,
Depuis quelques temps, je bosse pas mal avec Jquery et Jquery-ui pour créer des composants javascript et j'admets gagner un temps fou grâce à toutes les ressources et plug-in disponibles rapidement sur la toile.

Il y a cependant quelque chose qui me perturbe encore, c'est la notion de namespace au sein de ce framework qui si je ne me trompe pas est quasi inexistante.

A la base, je viens plutôt d'un monde où le code est organisé dans des package (Java, Actionscript). Il est donc possible de choisir une implémentation différente en fonction du package que l'on souhaite importer.

Certains me diront que c'est possible tout simplement en considérant que la phase d'import correspond à la balise <script> en HTML mais il peut arriver que dans certains cas d'utilisation, 2 fichiers utilisant le même nom de plug-in puissent être importés non ?

Au niveau de la communauté, j'ai vu que certaines personnes préfixent leurs fonctions avec un namespace :

$("#mySelector").myProject_function();

D'autres préfixent le namespace de base :

$.fn.ui_dialog = $.fn.dialog;

$.widget( "custom.dialog", {
_create: function() {
this.element.css( "background-color", "red" );
}
});

$( "#dialog1" ).ui_dialog();
$( "#dialog2" ).dialog();

Il y en a même qui ont crée un plug-in jquery $.namespace

Pour l'instant j'ai choisi la première solution, mais je trouve pas ça vraiment très propre...

Et vous, quelle solution avez-vous choisie / choisiriez-vous ?
Est-ce qu'il y a un moyen plus propre de gérer des espaces de nom en Jquery ?


RE: [Jquery/Jquery-ui] Gestion des espaces de noms (namespaces) - Anthor - 17-10-2010

jQuery est namespacé naturellement par l'utilisation de closure.
Quelque soit la méthode utilisé on peux toujours avoir 2 plugins avec le même nom.

Y'a pas de solutions miracles, si 2 plugins ont le même préfixe, que fais-tu, tu rajoutes un énième préfixe ? Big Grin


RE: [Jquery/Jquery-ui] Gestion des espaces de noms (namespaces) - Shao - 17-10-2010

(17-10-2010, 12:28 PM)Anthor a écrit : Y'a pas de solutions miracles, si 2 plugins ont le même préfixe, que fais-tu, tu rajoutes un énième préfixe ? Big Grin

J'ai bien dit que je trouvais la solution pas très propre. Wink
Cela dit, mon namespace correspond à mon nom de projet, et si le composant est assez générique, je ne le préfixe pas. Du coup, c'est rare de rencontrer ce genre de cas (mais on peut quand même le rencontrer).

L'idée est de savoir si, au sein de la communauté, des personnes ont rencontré les mêmes problématiques que moi et comment elles les ont résolu. C'est important de savoir si on se dirige vers la bonne direction. Smile


RE: [Jquery/Jquery-ui] Gestion des espaces de noms (namespaces) - Anthor - 17-10-2010

Je le tourne différemment, la finalité reste la même.

Tu utilises de vrais namespaces, tu as 2 fois le même namespace, que fais-tu ?


RE: [Jquery/Jquery-ui] Gestion des espaces de noms (namespaces) - Shao - 17-10-2010

Je ne suis pas sûr d'avoir compris la question mais je vais tenter de répondre avec ce que j'ai compris.

Si je dispose de vrais namespaces (à la Java par exemple) et que j'ai 2 fois le même namespace avec la même classe, je vais avoir un conflit de nom de classe (pire, une classe va en écraser une autre si j'essaye de l'importer au sein de mon projet).
Mais normalement, les développeurs sont assez intelligents pour éviter ce genre de cas (on retrouve souvent le nom de la boite/organisation/association avant le début du projet par exemple).

D'ailleurs le problème est similaire avec PHP, et les gens l'ont résolu avec des underscores pour représenter une pseudo arborescence de package.

Il m'est déjà arrivé par exemple d'avoir un composant jquery qui réponde à 90% des besoins et je dois trouver un moyen pour rajouter les 10% restants.
Ce que je fais assez souvent, je wrap le composant actuel dans un nouveau plug-in/widget jquery et je rajoute les nouvelles fonctionnalités qui m'intéressent (afin de na pas modifier directement la librairie).
Cependant le rôle de ce composant n'a pas vraiment changé, j'ai juste rajouté une fonction ou deux tout au plus, pour moi le composant doit garder le même nom...

Avec un vrai système de namespace, cette problématique peut être résolue : C'est un composant personnel, donc je le range dans un package personnel, et je peux me servir des deux composants quoiqu'il arrive.


RE: [Jquery/Jquery-ui] Gestion des espaces de noms (namespaces) - Anthor - 17-10-2010

Il est arrivé que des plugins aient le même nom, et ils se sont arrangés pour changer. Il n'y a pas de solutions miracles.


RE: [Jquery/Jquery-ui] Gestion des espaces de noms (namespaces) - niahoo - 17-10-2010

en fait ça fait 5 posts que vous êtes d'accord.
(l'un pour dire qu'il y pas de solution à part se démerder pour pas avoir le même nom, l'autre pour dire qu'il préfixe ou change ses noms)