Project

General

Profile

Bug #74523

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

Added by Thomas Jund about 1 year ago. Updated 3 months ago.

Status:
Information nécessaire
Priority:
Normal
Assignee:
-
Target version:
-
Start date:
14 February 2023
Due date:
% Done:

0%

Estimated time:
Patch proposed:
No
Planning:
No
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.


Related issues

Related to Combo - Development #52959: forcer l'affichage du graphe à l'affichage de la celluleFermé12 April 2021

Actions

History

#1

Updated by Thomas Jund about 1 year ago

  • Related to Development #52959: forcer l'affichage du graphe à l'affichage de la cellule added
#2

Updated by Valentin Deniaud 3 months ago

  • Tags set to statistiques

Also available in: Atom PDF