Javascript Methode required

Bonjour,

Je travaille avec simplicité 5.0.50.

J’ai implémenté une ressource javascript ou j’agis sur la partie dynamique d’un formulaire notament sur des visibilités de champs. J’ai besoin de jouer aussi avec le caractère obligatoire d’un champ mais cela ne semble pas marcher :

var namEpciLibelleDep =  ui.getUIField(ctn, obj, "xx");
namEpciLibelleDep.ui.required(true);

J’ai testé ce type de code ($ui.getUIField(null, o, "myField").ui.required(true) dans le hook UI onload d’un objet métier) et ça marche (j’ai testé sur une 5.0 à jour = 5.0.51):

	Simplicite.UI.hooks.DemoClient = function(o, cbk) {
		try {
			o.locals.ui.form.onload = function() {
				try {
					$ui.getUIField(null, o, "demoCliAddress2").ui.required(true);
				} catch(el) {
					console.error(el);
				}
			}
		} catch(e) {
			console.error(e.message);
		} finally {
			cbk && cbk();
		}
	};

Peut être avez vous du code JS ou des contraintes ou du code Java qui force le caractère obligatoire de votre attribut par ailleurs.

PS: Je ne sais pas pourquoi vous implémentez cette logique métier via du code JS mais il est en général plus pertinent d’implémenter les règles d’obligatoirité d’un attribut par des contraintes back (+ front (= dynamique) pour le confort utilisateur) ou du code serveur. Une régle métier implémentée en JS sur la UI ne sera pas appliquée dans le cas d’un appel d’API ou d’import I/O, etc.

J’en suis bien conscient, j’ai une vérification en back obligatoirement car il s’agit de deux champs mutuellement exclusifs obligatoires. Mais je souhaite afficher l’étoile sur les champs en même temps que je les affiche.

Je vais investiguer d’avatange.

PS: Je ne vois à priori rien dans les commits de la révision 5.0.51 qui ait un lien avec ce sujet.

Rendre un champ obligatoire en front, c’est uniquement ajouter la classe required par code sur le .form-group du champ. Mais c’est mieux de passer par l’accesseur du field si un jour cela change.

o.locals.ui.form.onload = function(ctn, o, id) {
  var f = $ui.getUIField(ctn, o, "myfield");
  f.ui.required(true);
  // equivalent de 
  $(f.ui.input).closest(".form-group").addClass("required");
}

NB: Il ne faut jamais :

  • mettre “null” à la place du container passé en paramètre dans getUIField = au cas où le formulaire ne soit pas en frame principale (dans un popup, splitté avec un autre…).
  • idem pour l’instance d’objet, il faut prendre l’instance passée en paramètre au moment de l’appel au onload, et pas la référence passée au constructeur du hook au début

Car vous pourriez adresser un autre champs que celui que vous pensiez.

1 Like
 $(f.ui.input).closest(".form-group").addClass("required");

C’est parfait ça. Merci beaucoup. Derrière je refait la validation en back donc pas de soucis.

OK mais il n’y a pas de raison que f.ui.required(true); fasse autre chose puisque, comme le dit @Francois, c’est ce que fait cette fonction. Si ça ne marche pas pareil c’est qu’il y a une subtilité dans votre cas qu’on doit identifier.

Utiliser sont équivalent plus “bas niveau” c’est, comme le dit aussi @Francois, prendre le risque que ça ne fonctionne plus dans une version ultérieure.

This topic was automatically closed 60 minutes after the last reply. New replies are no longer allowed.