Salutations,
s'il y a bien une méthode d'utilisation de javascript que je trouve cohérente pour du jeu web un peu lourd et les sites web en général, c'est pour enrichir le langage HTML.
En d'autres mots, je n'aime pas la façon "jQuery" (je ne sais pas trop comment l'appeler?!) qui consiste à balancer du code JS au milieu de la page pour aller manipuler ses éléments de manière impérative. Par exemple:
En revanche, l'autre approche que j'affectionne consiste à "déclarer" de nouveaux comportements à partir des classes HTML, et éventuellement des data attributes. Par exemple:
Bref, le concept revient à centraliser les morceaux JS pour n'avoir plus que des attributs à poser dans ses balises HTML (et le "framework" se démerde pour appliquer à ces éléments HTML "customs" les comportements correspondants). Voire, s'il est "bien fait", le code JS global peut retirer le comportement spécifique si la classe "open-in-modal" est retirée du noeud HTML.
Comme dit: on n'est pas très loin de la notion de "custom elements", avec comme seule éventuelle différence de se baser sur la class plutôt que sur le nom du tag. Ce qui permet du coup de dupliquer le node sans aucun problème (le comportement sera ensuite rajouté au noeud dupliqué par le JS global), ce que la 1er méthode ne permet pas (il faut ré-appliquer le comportement manuellement).
Au final, mes questions sont les suivantes:
• Comment utilisez-vous le JS dans vos jeux, et éventuellement à votre taff? Façon 1 (que je qualifie d'impérative: j'appelle la fonction JS à l'endroit où j'en ai besoin) ou façon 2 (que je qualifie de déclarative: je pose une classe sur mon élément HTML et le code JS du jeu se démerde) ?
• Existe-t-il un nom de pattern pour ces deux approches? Voire des frameworks qui utilisent l'une ou l'autre de ces approches?
• Quels avantages/inconvénients aux deux approches?
[Oui, c'est peut-être un peu hors contexte et mal formulé, mais c'est une question qui est passée au taff]
s'il y a bien une méthode d'utilisation de javascript que je trouve cohérente pour du jeu web un peu lourd et les sites web en général, c'est pour enrichir le langage HTML.
En d'autres mots, je n'aime pas la façon "jQuery" (je ne sais pas trop comment l'appeler?!) qui consiste à balancer du code JS au milieu de la page pour aller manipuler ses éléments de manière impérative. Par exemple:
Code :
<!-- Et encore, c'est parfois des "span" que je vois -->
<a href="#">Open modal</a>
<script>
$('a').on('click', function () { $.openInModal("lalala.html"); }
</script>
En revanche, l'autre approche que j'affectionne consiste à "déclarer" de nouveaux comportements à partir des classes HTML, et éventuellement des data attributes. Par exemple:
Code :
// JS dédié, global
// qui utilise les DOMMutation ou autre pour trigger la ligne ci-dessous
document.querySelectorAll('a.open-in-modal').forEach(
n => n.addEventListener(
'click',
e => { /* code de l'openInModal avec n.getAttribute('href') */}));
Code :
<!-- Code utilisateur, dans n'importe quelle page du site -->
<a href="lalala.html" class="open-in-modal">Open modal</a>
Bref, le concept revient à centraliser les morceaux JS pour n'avoir plus que des attributs à poser dans ses balises HTML (et le "framework" se démerde pour appliquer à ces éléments HTML "customs" les comportements correspondants). Voire, s'il est "bien fait", le code JS global peut retirer le comportement spécifique si la classe "open-in-modal" est retirée du noeud HTML.
Comme dit: on n'est pas très loin de la notion de "custom elements", avec comme seule éventuelle différence de se baser sur la class plutôt que sur le nom du tag. Ce qui permet du coup de dupliquer le node sans aucun problème (le comportement sera ensuite rajouté au noeud dupliqué par le JS global), ce que la 1er méthode ne permet pas (il faut ré-appliquer le comportement manuellement).
Au final, mes questions sont les suivantes:
• Comment utilisez-vous le JS dans vos jeux, et éventuellement à votre taff? Façon 1 (que je qualifie d'impérative: j'appelle la fonction JS à l'endroit où j'en ai besoin) ou façon 2 (que je qualifie de déclarative: je pose une classe sur mon élément HTML et le code JS du jeu se démerde) ?
• Existe-t-il un nom de pattern pour ces deux approches? Voire des frameworks qui utilisent l'une ou l'autre de ces approches?
• Quels avantages/inconvénients aux deux approches?
[Oui, c'est peut-être un peu hors contexte et mal formulé, mais c'est une question qui est passée au taff]