Así que he creado este widget jqueryui. Esto crea un div en el que puedo transmitir errores. El código del widget se ve así:Javascript Array Concat no funciona. ¿Por qué?
$.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;
},
});
puedo agregar mensajes de error en ella, y las referencias a elementos de la página que se va a poner en un estado de error. Lo uso para validar diálogos. En el método "addError" me puede pasar en una sola identificación, o una tabla de id, así:
$("#registerDialogError").miniErrorLog(
'addError',
"Your passwords don't match.",
[ "#registerDialogPassword1", "#registerDialogPassword2" ]);
Pero cuando paso en una serie de identificadores no funciona. El problema está en las siguientes líneas (creo):
if (ref instanceof Array)
this.refs.concat(ref);
else
this.refs.push(ref);
¿Por qué no funciona? this.refs y ref son ambas matrices. Entonces, ¿por qué no funciona el concat?
Bonificación: ¿estoy haciendo algo más tonto en este widget? Es mi primera.
Eso lo hizo. Hubiera pensado que un método concat en un objeto se agregaría al objeto. Pero supongo que no es así como funciona. –
@Rafael: El método 'push' hace eso, puedes hacer' [] .push.apply (this.refs, ref) ' – Bergi