Jadi saya telah membuat widget jqueryui ini. Ini menciptakan div tempat saya dapat mengalirkan kesalahan. Kode widget terlihat seperti ini:
$.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;
},
});
Saya dapat menambahkan pesan kesalahan ke dalamnya, dan referensi ke elemen halaman yang akan dimasukkan ke dalam status kesalahan. Saya menggunakannya untuk memvalidasi dialog. Dalam metode "addError" saya bisa mengirimkan satu id, atau array id, seperti ini:
$( "#registerDialogError" ).miniErrorLog(
'addError',
"Your passwords don't match.",
[ "#registerDialogPassword1", "#registerDialogPassword2" ] );
Tetapi ketika saya mengirimkan array id itu tidak berfungsi. Masalahnya ada di baris berikut (menurut saya):
if ( ref instanceof Array )
this.refs.concat( ref );
else
this.refs.push( ref );
Mengapa concat itu tidak berhasil. this.refs dan ref keduanya adalah array. Jadi mengapa concat tidak berfungsi?
Bonus: apakah saya melakukan hal lain yang bodoh di widget ini? Ini yang pertama bagiku.
javascript
jquery
jquery-ui
Rafael Baptista
sumber
sumber
Jawaban:
Metode concat tidak mengubah larik asli, Anda perlu menetapkannya kembali.
if ( ref instanceof Array ) this.refs = this.refs.concat( ref ); else this.refs.push( ref );
sumber
push
Metodenya melakukan itu, Anda bisa melakukannya[].push.apply(this.refs, ref)
Inilah alasannya mengapa:
Anda perlu menetapkan hasil penggabungan kembali dalam larik yang Anda miliki.
sumber
Untuk memperluas Konstantin Dinev:
.concat()
tidak menambah objek saat ini, jadi ini tidak akan berfungsi:Ini akan:
sumber
Anda harus menetapkan kembali nilai menggunakan = ke array, yang Anda ingin mendapatkan nilai gabungan
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);
sumber
sumber