Projet

Général

Profil

Bug #74523

cell chartngcell, Js au sein de la cellule (mauvaise idée ?)

Ajouté par Thomas Jund il y a environ un an. Mis à jour il y a 3 mois.

Statut:
Information nécessaire
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
14 février 2023
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Non
Planning:
Non
Tags:

Description

En me penchant sur #74061, je réalise qu'il y a des répétitions dans les handlers d'événements: le même handler attaché plusieurs fois au même event.

Dans mon cas (charte-filter.html l.43)

document.querySelectorAll('div.chartngcell embed').forEach(graph => {
  graph.addEventListener('load', load_filters_cell_last)
});

`load_filters_cell_last` est lancé 2x au chargement de la page, parce l'embed svg d'un graph est loadé 2x :

Le pourquoi m'a retourné la tête, il se trouve dans le script de la cellule chartngcell.html (l.27)

$(window).on('load resize gadjo:sidepage-toggled combo:resize-graphs', function(e) {
      // fonction RefreshGraph qui recharge l'embed svg
}).trigger('combo:resize-graphs');

RefreshGraph est lancée à l'event DomReady par le `trigger('combo:resize-graphs')`,l'embed faisant partie d'une ressource de la page à charger, l'event load sur la page ne sera lancer qu'ensuite, et donc relancer RefreshGraph une 2e fois (qui va donc trigger une 2e fois un load sur l'embed, qui va rafraichir la cellule filtre, etc).

C'est déjà pas terrible, et on pourrait se dire qu'il suffit de supprimer le chargement de l'embed svg sur l'event `load`.
Mais le code JS se trouve au sein du template de la cellule.
Il est donc exécuté 2x si 2 cellules graphs dans la page, ce qui donne

  1. Cell 1, script 1, on attache functionRefreshGraph à l'event 'combo:resize-graphs' et `load`
  2. Cell 1, script 1, on joue functionRefreshGraph 1x pour cell 1, via trigger 'combo:resize-graphs'
  3. Cell 2, script 2 ; on attache une 2e fois functionRefreshGraph à l'event 'combo:resize-graphs' et |load`
  4. Cell 2, script 2, on joue functionRefreshGraph 2x (une 1X pour chaque cellule) via trigger 'combo:resize-graphs'
  5. fin chargement de la page, load se lance, on rejoue functionRefreshGraph 2x (une 1X pour chaque cellule)

Le rafraichement du SVG est lancé 3x pour la première cellule graph et 2x pour la seconde. Et ça empire tranquille avec 3, 4, 5 cellules graphs dans une page.

Et me dit que c'est une assez mauvaise idée, de laisser les JS des cellules au sein des templates. Des effets de bord qu'on ne maitrise pas vraiment.


Demandes liées

Lié à Combo - Development #52959: forcer l'affichage du graphe à l'affichage de la celluleFermé12 avril 2021

Actions

Historique

#1

Mis à jour par Thomas Jund il y a environ un an

  • Lié à Development #52959: forcer l'affichage du graphe à l'affichage de la cellule ajouté
#2

Mis à jour par Valentin Deniaud il y a 3 mois

  • Tags mis à statistiques

Formats disponibles : Atom PDF