Więc stworzyłem ten widget jqueryui. Tworzy div, do którego mogę przesyłać błędy. Kod widgetu wygląda następująco:Javascript Array Concat nie działa. Czemu?
$.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;
},
});
Mogę dodać do niego komunikaty o błędach oraz odniesienia do elementów strony, które zostaną wprowadzone w stan błędu. Używam go do sprawdzania okien dialogowych. W „addError” metody mogę przekazać w jednym ID, lub tablicę identyfikatorów, takich jak to:
$("#registerDialogError").miniErrorLog(
'addError',
"Your passwords don't match.",
[ "#registerDialogPassword1", "#registerDialogPassword2" ]);
Ale kiedy przechodzą w tablicy identyfikatorów nie działa. Problem jest w następujących liniach (myślę):
if (ref instanceof Array)
this.refs.concat(ref);
else
this.refs.push(ref);
Dlaczego ta concat nie działa. this.refs i ref są obydwoma tablicami. Dlaczego więc concat nie działa?
Bonus: Czy robię cokolwiek innego głupiego w tym widżecie? To moja pierwsza.
To się udało. Pomyślałbym, że metoda concat na obiekcie zostanie dołączona do obiektu. Ale myślę, że to nie tak działa. –
@Rafael: Metoda 'push' robi to, możesz zrobić' [] .push.apply (this.refs, ref) ' – Bergi