J'ai besoin d'implémenter les messages de validation qui apparaissent juste à côté du champ invalide. Toute aide serait appréciée.
msgTarget: 'side'
ajoutera une icône d'erreur à la droite du champ, affichant le message dans une fenêtre contextuelle en survol uniquement.
si vous lisez attentivement la documentation, il existe une option supplémentaire pour msgTarget http://docs.sencha.com/ext-js/4-1/#!/api/Ext.form.field.Text-cfg-msgTarget
[identificateur d'élément] Ajoutez le message d'erreur directement au innerHTML de l'élément spécifié. vous devez ajouter un "td" à droite du contrôle de façon dynamique avec l'id. alors si vous spécifiez msgTarget: 'element id'
cela fonctionnera.
Le msgTarget: 'elementId'
peut fonctionner, mais il semble très limité, en particulier lorsque vous souhaitez plusieurs instances d'un composant ExtJs réutilisable (et donc plusieurs instances du même élément msgTarget). Par exemple, j'ai un éditeur de style MDI dans lequel vous pouvez ouvrir plusieurs éditeurs du même type dans une interface à onglet. Cela ne semble pas non plus fonctionner avec itemId
ou reconnaître la hiérarchie DOM/conteneur.
Je préfère donc désactiver la gestion par défaut si je ne veux pas exactement l'une des options d'affichage de message intégrées en définissant msgTarget: none
, puis en effectuant mon propre affichage de message en gérant l'événement fielderrorchange
qui est conçu exactement pour ce scénario. Dans ce cas, je peux maintenant respecter la hiérarchie de mes formulaires, même avec plusieurs instances du même formulaire d'éditeur, car je peux sélectionner l'élément d'affichage d'erreur par rapport à l'éditeur.
Voici comment je le fais:
{
xtype: 'fieldcontainer',
fieldLabel: 'My Field Label',
layout: 'hbox', // this will be container with 2 elements: the editor & the error
items: [{
xtype: 'numberfield',
itemId: 'myDataFieldName',
name: 'myDataFieldName',
width: 150,
msgTarget: 'none', // don't use the default built in error message display
validator: function (value) {
return 'This is my custom validation message. All real validation logic removed for example clarity.';
}
}, {
xtype: 'label',
itemId: 'errorBox', // This ID lets me find the display element relative to the editor above
cls: 'errorBox' // This class lets me customize the appearance of the error element in CSS
}],
listeners: {
'fielderrorchange': function (container, field, error, eOpts) {
var errUI = container.down('#errorBox');
if (error) {
// show error element, don't esape any HTML formatting provided
errUI.setText(error, false);
errUI.show();
} else {
// hide error element
errUI.hide();
}
}
}
}
Voir le msgTarget config du contrôle. msgTarget: 'side'
mettrait le message de validation à droite du contrôle.
Vous pouvez utiliser 'msgTarget: [element id]'. Vous devez écrire du code HTML pour pouvoir utiliser l'id d'élément au lieu de itemId. La fonction de validation ajoute un élément de liste sous un élément que vous définissez comme "msgTarget" . Si vous souhaitez afficher les éléments que vous souhaitez pour la validation, vous pouvez passer du code HTML au lieu d'un texte.
{
xtype: 'container',
items: [
{
xtype: 'textfield',
allowBlank: false,
msgTarget: 'hoge'
blankText: '<div style="color:red;">validation message</div>', // optional
},
{
xtype: 'box',
html: '<div id="hoge"></div>' // this id has to be same as msgTarget
}
]
}
Utilisez msgTarget 'side' pour la validation dans le côté droit et msgTarget 'under' pour le bas
items: [{
xtype: 'textfield',
fieldLabel: 'Name',
allowBlank: false,
name: 'name',
msgTarget: 'side',
blankText: 'This should not be blank!'
}]
Pour afficher le message d'erreur under/side dans la zone de texte de saisie, la propriété msgTarget fonctionnera uniquement si vous utilisez la présentation de formulaire.
Pour résoudre ce problème autrement que dans la présentation du formulaire, nous devons envelopper l'élément dans la classe "x-form-field-wrap".
vous pouvez trouver plus de détails sur le fil: https://www.sencha.com/forum/showthread.php?86900-msgTarget-under-problem