Bug #51224
widget ens-calendar : pas de gestion du "live"
0%
Description
Quand on choisi une date dans le widget ens-calendar (#50311) il n'y a pas d'évaluation live lancée pour mettre à jour d'autres champs sur la page.
Typiquement on ajoute un commentaire en dessous avec le contenu suivant :
{% if form_var_date %} Date : {{ form_var_date_structured_date_format }} ({{ form_var_date_structured_date }}) Matin : {{ form_var_date_structured_morning }} Repas du midi : {{ form_var_date_structured_lunch }} Après-midi : {{ form_var_date_structured_afternoon }} {% endif %}
celui-ci ne se met à pas à jour.
(ça marche avec une liste simple, c'est vraiment l'usage de template-ens-calendar qui fait que ça ne passe plus)
Fichiers
Révisions associées
Historique
Mis à jour par Thomas Noël il y a environ 3 ans
De très loin, je me dis que peut-être les « preventDefault » bloquent la diffusion d'un événement « ce champ a changé », qui provoquerait ensuite l'appel au système "live" ...? Je n'arrive pas à bien cerner l'affaire :/
Mis à jour par Frédéric Péters il y a environ 3 ans
@@ -233,6 +233,7 @@ $(function() { e.preventDefault(); $day_btns.removeClass(activated_day_class); $options.eq(this.dataset.optionIdx).prop('selected', true); + le select.trigger('wcs:change'); $(this).addClass(activated_day_class); }); };
quelque chose genre ça (si je comprends bien que la ligne $options.eq... est celle qui amène le changement de valeur).
Mis à jour par Thomas Jund il y a environ 3 ans
Merci Fred, c'est bien ça, j'ai oublié de lancé un event change sur le $select après changement de valeur.
Petite question, pourquoi lancer un event custom 'wcs:change" plutôt que l'event natif "change", une convention particulière ?
Mis à jour par Thomas Jund il y a environ 3 ans
- Fichier 0001-isere-cd38-ens-calendar-launch-change-event-when-day.patch 0001-isere-cd38-ens-calendar-launch-change-event-when-day.patch ajouté
- Tracker changé de Support à Bug
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Frédéric Péters il y a environ 3 ans
Ça peut éviter des enchainements excessifs d'événements qui se répondent, dans le cas présent je pense que trigger('change') pourrait marcher aussi. (à tester).
Mis à jour par Thomas Noël il y a environ 3 ans
- Statut changé de Solution proposée à En cours
Ca marche mais uniquement quand on change de date. Ca ne marche pas quand on arrive la première fois sur le widget. J'ai l'impression qu'il manque un wcs:change à ce moment, lors de l'initialisation de la liste. J'ai donc bidouillé un wcs:change sur la fin de init(), tel que ci-dessous. Sans être bien sûr de moi, ça me semble être ce qu'il faut faire...?
--- a/templates/variants/isere-cd38/qommon/forms/widgets/select--ens-calendar.html +++ b/templates/variants/isere-cd38/qommon/forms/widgets/select--ens-calendar.html @@ -233,8 +233,10 @@ $(function() { e.preventDefault(); $day_btns.removeClass(activated_day_class); $options.eq(this.dataset.optionIdx).prop('selected', true); + $select.trigger('wcs:change'); $(this).addClass(activated_day_class); }); + $select.trigger('wcs:change'); }; // if Static
Mis à jour par Thomas Jund il y a environ 3 ans
théoriquement, on a besoin de lancer l'event "change" en JS lorsque le value du select a été modifié en JS. Sinon, pas besoin.
Ca ne marche pas quand on arrive la première fois sur le widget
Ça veut donc dire que la première fois est déjà modifié en JS via un live et qu'à ce moment là un jour est déjà ou par défaut sélectionné. Donc il faut bien ajouter un event change lorsque l'event "wcs:options-change" est lancé.
Je le mettrais du coup dans la fonction dédiée à l'event plutôt que dans la function init
$select.on('wcs:options-change', function(ev, data) { if (!data) return; calendar_days = define_calendar_days(data.items); $('<option value=""></option>').prependTo($select); $options = $select.find('option'); init(); + $select.trigger('wcs:change'); });
Mis à jour par Thomas Jund il y a environ 3 ans
- Fichier 0001-isere-cd38-ens-calendar-trigger-change-event-when-da.patch 0001-isere-cd38-ens-calendar-trigger-change-event-when-da.patch ajouté
- Statut changé de En cours à Solution proposée
nouveau patch à tester
Mis à jour par Thomas Noël il y a environ 3 ans
- Statut changé de Solution proposée à Solution validée
Impec, merci !
Mis à jour par Thomas Noël il y a environ 3 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit d2b4d1e3c927db59c2439b85ef5f51148799ddd1 Author: Thomas JUND <tjund@entrouvert.com> Date: Mon Feb 22 15:10:58 2021 +0100 isere-cd38: ens-calendar: trigger change event when day is selected (#51224)
Mis à jour par Frédéric Péters il y a environ 3 ans
- Statut changé de Résolu (à déployer) à Solution déployée
isere-cd38: ens-calendar: trigger change event when day is selected (#51224)