所以我创建了这个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 );
为什么那个连接器不工作。这个.refs和ref都是数组。那为什么concat不起作用呢?
额外收获:我在这个小部件中还做了什么蠢事吗?这是我第一次
8条答案
按热度按时间mrphzbgm1#
concat方法不会更改原始数组,您需要重新分配它。
olmpazwi2#
原因如下:
定义和用法
concat()方法用于连接两个或多个数组。
此方法不更改现有数组,但返回一个新数组,其中包含联接数组的值。
您需要将串联的结果赋值回您拥有的数组中。
mpbci0fu3#
关于Konstantin Dinev:
.concat()
不会添加到当前对象,所以这将不工作:这将:
csbfibhn4#
你必须使用=将值重新赋值给数组,你想得到关联的值
7fyelxc55#
cu6pst1q6#
其他人提到
this.refs.concat(ref);
分配并返回一个新的数组,可以重新分配给对象:this.refs = this.refs.concat(ref);
.concat
不修改任何一个参数数组。然而,这里可能更准确的是使用
push
,它将元素添加到调用数组中:this.refs.push(ref);
(=
没有重新分配--push
返回新的数组长度,通常会被忽略)。如果要添加多个项,
push
接受变量参数,因此您可以将数组扩展到它上面:concat
可以通过重新分配创建类似的结果:concat
显然不太适合这个用例,但对于其他用例来说很有用,特别是当需要不变性时(例如,当使用React状态时)。使用
push
进行变异的另一个场合是在一个应该对其参数进行变异的函数中:合并数组和项的另一个选项是spread语法,类似于concat:
以上可以通过chained
concat
调用来完成:请注意,如果你有一个数组,你不想在
push
过程中展平,只需跳过...
传播:mf98qq947#
需要注意的是,如果你真的想在使用concat函数时有一个可变数组(我说的可变是指它不创建一个新数组,而是改变现有的数组),你可以为那个数组示例重新分配concat函数。当我需要这个的时候我就这么做了。
pinkon5k8#
concat
方法不会改变原始数组,您可以使用数组解构。