J'ai donc créé ce widget jqueryui. Il crée un div dans lequel je peux diffuser les erreurs. Le code du widget ressemble à ceci :
$.widget('ui.miniErrorLog', {
logStart: "<ul>", // these next 4 elements are actually a bunch more complicated.
logEnd: "</ul>",
errStart: "<li>",
errEnd: "</li>",
content: "",
refs: [],
_create: function() { $(this.element).addClass( "ui-state-error" ).hide(); },
clear: function() {
this.content = "";
for ( var i in this.refs )
$( this.refs[i] ).removeClass( "ui-state-error" );
this.refs = [];
$(this.element).empty().hide();
},
addError: function( msg, ref ) {
this.content += this.errStart + msg + this.errEnd;
if ( ref ) {
if ( ref instanceof Array )
this.refs.concat( ref );
else
this.refs.push( ref );
for ( var i in this.refs )
$( this.refs[i] ).addClass( "ui-state-error" );
}
$(this.element).html( this.logStart + this.content + this.logEnd ).show();
},
hasError: function()
{
if ( this.refs.length )
return true;
return false;
},
});
Je peux y ajouter des messages d'erreur et des références à des éléments de page qui seront mis en erreur. Je l'utilise pour valider les boîtes de dialogue. Dans la méthode "addError", je peux passer un seul id, ou un tableau d'id, comme ceci :
$( "#registerDialogError" ).miniErrorLog(
'addError',
"Your passwords don't match.",
[ "#registerDialogPassword1", "#registerDialogPassword2" ] );
Mais lorsque je passe dans un tableau d'identifiants, cela ne fonctionne pas. Le problème se situe dans les lignes suivantes (je pense) :
if ( ref instanceof Array )
this.refs.concat( ref );
else
this.refs.push( ref );
Pourquoi la concaténation ne fonctionne-t-elle pas ? this.refs et ref sont tous deux des tableaux. Alors pourquoi le concat ne fonctionne-t-il pas ?
Bonus : est-ce que je fais autre chose de stupide dans ce widget ? C'est mon premier.