Javascript Array Concat не работает. Зачем?
Итак,я создал этот виджет jqueryui. Его создает div, в который я могу передавать ошибки. Код виджета выглядит так:
$.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;
},
});
Я могу добавить в него сообщения об ошибках и ссылки на элементы страницы, которые будут помещены в состояние ошибки. Я использую его для проверки диалогов. В методе "addError" я могу передать один идентификатор или массив идентификаторов, например:
$( "#registerDialogError" ).miniErrorLog(
'addError',
"Your passwords don't match.",
[ "#registerDialogPassword1", "#registerDialogPassword2" ] );
но когда я передаю в массив идентификаторов это не работает. Проблема заключается в следующих строках (i думаю):
if ( ref instanceof Array )
this.refs.concat( ref );
else
this.refs.push( ref );
почему это конкат не работает. этот.refs и ref-это оба массива. Так почему же конкат не работает?
бонус: я делаю что-нибудь еще тупое в этом виджете? Это мой первый.
2 ответа:
метод concat не изменяет исходный массив, его необходимо переназначить.
if ( ref instanceof Array ) this.refs = this.refs.concat( ref ); else this.refs.push( ref );
вот почему:
определение и использование
метод concat() используется для объединения двух или более массивов.
этот метод не изменяет существующие массивы, но возвращает новый массив, содержащий значения Соединенных массивов.
вам нужно назначить результат конкатенации обратно в массив, который у вас есть.