Ajout d'un champ de type date dans un script front

Ajout d'un champ de type date dans un script front
0
Tags: #<Tag:0x00007fec5bc5d880>

Bonjour,

Nous aimerions utiliser un attribut de type date directement dans un script (via un objet externe).

Pouvez-vous nous fournir un exemple pour intégrer correctement ce type de champ ?

Cordialement
Jean-Baptiste

Si je comprends bien vous voulez un datepicker ?

  • Soit vous passez par la couche Simplicité qui affiche un attribut de type date d’un objet métier
$ui.getUIObject('myobject', function(obj) {
   var field = obj.getField("mydate") // { type:app.TYPE_DATE, v: '2020-05-04' ...};
   var df = $ui.view.tools.displayField(ctn, obj, field);
   $("#mydiv").append(df);
}
  • Si c’est juste un champ “input” autonome, autant utiliser le plugin directement avec vos paramètres :

Bonjour,

Suite à la réponse précédente, j’ai ajouté un datePicker un objet externe (notre arbre spécifique).

Cependant je rencontre un problème dont j’ai du mal à trouver la cause.

Lorsque je modifie la date via le calendrier du datePicker, Simplicité semble détecter une modification. Cela a pour conséquence l’ouverture de la pop-up “Voulez-vous enregistrer vos modifications avant de quitter” alors qu’aucune donnée de formulaire n’a été changée.

Est ce qu’il y a un listener global qui capte le changement de la date ? Y a-t-il une méthode front pour les objets externes qui permet de savoir si des changements ont été appliqués (du même type que l’attribut front obj.locals.hasChanged pour les objets métiers).

Merci d’avance pour votre aide.

Jean-Baptiste

Si c’est du code spécifique, il faudrait l’indiquer pour savoir qui positionne le flag hasChanged sur l’objet et responsable de ce popup quand on tente de recharger/quitter la zone.

Un événement change est associé aux éléments select/input/textarea du formulaire quand on passe par les verbes Simplicité displayForm, displayList (en edition)… via les verbes $ui.bindChange ou bindSaveAndQuit.

  • Vous pouvez essayer de le retirer via un .off("change") sur l’input date (attention les éventuelles contraintes front ne seront plus appliquées sur change).
  • Sinon le handler par défaut positionne un flag hasChanged dans les données de l’objet, qui peut être remis à false qq part avant de quitter la div.
  • ou essayer d’ajouter un change qui remet à false :
$("input.mydate").change(function(e) {
  obj.localParameter("hasChanged", false);
});

En y réfléchissant, à mon avis comme l’objet externe est chargé en même temps que le formulaire de l’objet (écran splitté), le bindSaveAndQuit qui passe une fois le formulaire affiché scanne également les inputs contenus dans l’objet externe en leur mettant un “change”.

Essayez d"ajouter la classe selrow à votre input, car elle est ignorée par ce binding automatique.
Sinon il faudra mettre du code front dans le hook form.onload de l’objet pour retirer le change ou en mettre un autre :

$("input.mydate").off("change").change(...);

J’ai ajouté la classe selrow et cela a résolu mon problème.
Merci François.

Ok c’est pas idéal car en fait c’est pour ignorer les check box de sélection en liste, et si un jour on décide mettre un style dessus ça n’ira pas avec ton input…

Il faudrait plutôt qu’on utilise une classe plus intelligible et sans style comme js-ignore-haschanged car ton cas peut se reproduire dans d’autres contextes d’objets intégrés au formulaire sans qu’on veuille provoquer un hasChanged (popup confirmer en cas de sortie sans sauver) + déclencher les contraintes front.

Ce sera fait d’ici demain car c’est pas grand chose.