Development #16419
declencher un evenement quand le formulaire de parametrage d'une cellule est configuré
0%
Description
Il s'agit des cas ou une action javascript doit avoir lieu après la soumission du formulaire d'une cellule.
Par exemple dans le cadre d'une cellule affichant une carte (ticket #8454) pour qu'après la soumission du formulaire la carte reste toujours visible il faut lancer la machinerie leaflet après le rechargement.
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 7 ans
- Lié à Development #8454: Possibilité d'afficher une carte OSM ajouté
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 7 ans
- Fichier 0001-manager-trigger-js-event-when-cell-form-reloaded-164.patch 0001-manager-trigger-js-event-when-cell-form-reloaded-164.patch ajouté
- Patch proposed changé de Non à Oui
Mis à jour par Thomas Noël il y a presque 7 ans
Il faut déclencher le trigger lors du success en général (juste après le $button.attr('disabled', null);
Bon, je suis pas à l'aise en JS, mais je pense que quand tu déclenches un trigger, tu peux le faire sur un objet et envoyer des données. Ici tu le fais sur tout le document et sans rien préciser, et on voit dans le code de #8454 que tu fais un vaste « $(window).on('load combo:cellform-reload', function() { $('div.combo-cell-map').each(function() ... »
Donc j'aurais plutôt imaginé un $form.parents('div.cell').trigger('combo:combo-cell-saved');
ajouté après la ligne 173 ($button.attr('disabled', null);
)
Et dans ce cas, tu dois récupérer le signal avec quelque chose dans ce genre dans le code de #8454 :$('.combo-cell-map').on('combo:combo-cell-saved', et que vazy redessine la map)
(mais vraiment je suis pas à l'aise, je préférerai l'avis d'un tiers, j'ai juste l'impression qu'avec ta technique, on redessine toute les cartes trouvées sur la page, et pas juste celle qu'on vient d'enregistrer)
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 7 ans
- Fichier 0001-manager-trigger-js-event-when-cell-form-reloaded-164.patch 0001-manager-trigger-js-event-when-cell-form-reloaded-164.patch ajouté
D'accord avec toi, mais à mon avis signal doit être envoyé après que le formulaire soit rechargé, pour que la fonction qui écoute le trigger puisser réagir.
Mis à jour par Thomas Noël il y a presque 7 ans
Serghei Mihai a écrit :
D'accord avec toi, mais à mon avis signal doit être envoyé après que le formulaire soit rechargé, pour que la fonction qui écoute le trigger puisser réagir.
En fait ce qui me "dérange" c'est que ça va pas être envoyé si y'a du ckeditor, donc je parlais surtout d'envoyer le signal en dehors du «if (data.indexOf('ckeditortype') == -1)». Mais ça peut effectivement être fait à la fin du "success".
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 7 ans
- Fichier 0001-manager-trigger-js-event-when-cell-form-reloaded-164.patch 0001-manager-trigger-js-event-when-cell-form-reloaded-164.patch ajouté
Tu as raison.
Mis à jour par Thomas Noël il y a presque 7 ans
Bon je termine sur "combo:cellform-reload", pour moi un nom de signal ce n'est pas le nom de l'action qui doit être faite (ça c'est le receveur qui décide) mais plutôt l'action qui vient d'être faite. Donc ici plutôt "combo:cellform-saved"
Mis à jour par Frédéric Péters il y a presque 7 ans
(la description du ticket peut-elle être étendue sur un exemple d'application ? c'est assez abstrait pour le moment).
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 7 ans
- Fichier 0001-manager-trigger-js-event-when-cell-form-reloaded-164.patch 0001-manager-trigger-js-event-when-cell-form-reloaded-164.patch ajouté
- Description mis à jour (diff)
Thomas Noël a écrit :
Bon je termine sur "combo:cellform-reload", pour moi un nom de signal ce n'est pas le nom de l'action qui doit être faite (ça c'est le receveur qui décide) mais plutôt l'action qui vient d'être faite. Donc ici plutôt "combo:cellform-saved"
Il y a également le cas ou le formulaire est re-affiché avec les messages d'erreur, genre un champ est vide ou pas valide, et n'est pas sauvegardé (mais rechargé).
Je propose baptiser l'evenement combo:cellform-reloaded
Mis à jour par Thomas Noël il y a presque 7 ans
Frédéric Péters a écrit :
(la description du ticket peut-elle être étendue sur un exemple d'application ? c'est assez abstrait pour le moment).
En fait j'ai demandé à Serghei d'extraire ce signal du patch de la cellule carte sur #8454. On y voit donc là bas un exemple d'utilisation de ce signal, qui s'occupe de relancer la machinerie leaflet après que l'utilisateur a cliqué sur "enregistré" ; sinon la carte devient un vide. Et comme Serghei n'a pas trouvé de signal existant, il propose d'ajouter celui-ci.
Mis à jour par Frédéric Péters il y a presque 7 ans
Je pense que j'aurais une préférence pour qu'une partie <script> présente dans un ajax_whatever_form.html d'une cellule soit automatiquement exécuté.
Ça demande une modification à PageEditCellView pour qu'il regarde si un template spécifique existe (plutôt que prendre ajax_cell_form.hmtl en toute situation), et à cell_form.html (utilisé pour le rendu initial) pour également utiliser celui-ci (plutôt qu'hardcoder form.as_p).
Je pense que ce n'est pas trop compliqué et que ça nous laissera du code plus facile à maintenir (pas toujours facile de suivre les événements js).
Alternativement l'approche prise dans #7344 (pour la cellule gallerie, pas intégrée) était d'utiliser l'existant attribut manager_form_template pour avoir le propre template de rendu, avec le <script> dedans (mais c'était il y a longtemps, pas sûr du fonctionnement avec le rechargement ajax via le bouton save, pas sur en fait que le bouton save ait été utile dans cette cellule.
Cela étant, vu qu'il y a déjà dix commentaires pour un patch d'une ligne (parce que je dirais de virer la construction $.Event() et d'utiliser une chaine directement dans l'appel .trigger()), peut-être est-il bon d'en rester là.
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 7 ans
- Fichier 0001-manager-trigger-js-event-when-cell-form-reloaded-164.patch 0001-manager-trigger-js-event-when-cell-form-reloaded-164.patch ajouté
Frédéric Péters a écrit :
Cela étant, vu qu'il y a déjà dix commentaires pour un patch d'une ligne (parce que je dirais de virer la construction $.Event() et d'utiliser une chaine directement dans l'appel .trigger()), peut-être est-il bon d'en rester là.
Je suis pour en rester là.
Mis à jour par Thomas Noël il y a presque 7 ans
Ack
(mais oui pour passer à terme à la solution de Fred qui ajouter en plus de la souplesse dans l'affichage des espace de configuration des cellules)
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 7 ans
- Statut changé de Nouveau à Résolu (à déployer)
Ok.
commit da590a77ae61401c33e12eccc8438aee5fbb336b Author: Serghei Mihai <smihai@entrouvert.com> Date: Sat May 20 14:43:07 2017 +0200 manager: trigger js event when cell form reloaded (#16419
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a plus de 6 ans
- Statut changé de Résolu (à déployer) à Fermé
manager: trigger js event when cell form reloaded (#16419)