그래서이 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”메소드에서 다음과 같이 단일 ID 또는 ID 배열을 전달할 수 있습니다.
$( "#registerDialogError" ).miniErrorLog(
'addError',
"Your passwords don't match.",
[ "#registerDialogPassword1", "#registerDialogPassword2" ] );
그러나 ID 배열을 전달하면 작동하지 않습니다. 문제는 다음 줄에 있습니다.
if ( ref instanceof Array )
this.refs.concat( ref );
else
this.refs.push( ref );
왜 그 연결이 작동하지 않습니다. this.refs와 ref는 모두 배열입니다. 그렇다면 concat이 작동하지 않는 이유는 무엇입니까?
보너스 :이 위젯에서 다른 멍청한 일을하고 있습니까? 첫 번째입니다.
답변
concat 메서드는 원래 배열을 변경하지 않으므로 다시 할당해야합니다.
if ( ref instanceof Array )
this.refs = this.refs.concat( ref );
else
this.refs.push( ref );
답변
그 이유는 다음과 같습니다.
정의 및 사용법
concat () 메서드는 둘 이상의 배열을 결합하는 데 사용됩니다.
이 메서드는 기존 배열을 변경하지 않지만 결합 된 배열의 값을 포함하는 새 배열을 반환합니다.
연결의 결과를 보유한 배열에 다시 할당해야합니다.
답변
Konstantin Dinev에서 확장하려면 :
.concat()
이 있도록, 현재의 객체에 추가하지 않습니다 하지 작동 :
foo.bar.concat(otherArray);
이것은 :
foo.bar = foo.bar.concat(otherArray);
답변
=를 사용하여 값을 다시 할당해야합니다.
let array1=[1,2,3,4];
let array2=[5,6,7,8];
array1.concat(array2);
console.log('NOT WORK : array1.concat(array2); =>',array1);
array1= array1.concat(array2);
console.log('WORKING : array1 = array1.concat(array2); =>',array1);
답변
dataArray = dataArray.concat(array2)