Also habe ich dieses jqueryui-Widget erstellt. Es erstellt ein Div, in das ich Fehler streamen kann. Der Widget-Code sieht folgendermaßen aus:
$.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;
},
});
Ich kann Fehlermeldungen hinzufügen und Verweise auf Seitenelemente, die in einen Fehlerzustand versetzt werden. Ich benutze es, um Dialoge zu validieren. In der "addError" -Methode kann ich eine einzelne ID oder ein Array von IDs wie folgt übergeben:
$( "#registerDialogError" ).miniErrorLog(
'addError',
"Your passwords don't match.",
[ "#registerDialogPassword1", "#registerDialogPassword2" ] );
Aber wenn ich eine Reihe von IDs übergebe, funktioniert das nicht. Das Problem liegt in den folgenden Zeilen (glaube ich):
if ( ref instanceof Array )
this.refs.concat( ref );
else
this.refs.push( ref );
Warum funktioniert das nicht? this.refs und ref sind beide Arrays. Warum funktioniert das Concat nicht?
Bonus: Mache ich noch etwas Dummes in diesem Widget? Es ist mein erster.
javascript
jquery
jquery-ui
Rafael Baptista
quelle
quelle
Antworten:
Die concat-Methode ändert das ursprüngliche Array nicht, Sie müssen es neu zuweisen.
quelle
push
Methode macht das, Sie könnten es tun[].push.apply(this.refs, ref)
Hier ist der Grund warum:
Sie müssen das Ergebnis der Verkettung wieder in Ihrem Array zuweisen.
quelle
Um Konstantin Dinev zu erweitern:
.concat()
wird nicht zum aktuellen Objekt hinzugefügt, daher funktioniert dies nicht :Dieser Wille:
quelle
Sie müssen den Wert mit = dem Array neu zuweisen, damit Sie einen präzisen Wert erhalten
quelle
quelle