fastadmin 开关操作出现错误 未更新任何行

smartfengwei 11天前 48

问题的本质就是0和'0'的区别问题,怎么说呢?
这是toggle的源码

toggle: function (value, row, index) {
                    var color = typeof this.color !== 'undefined' ? this.color : 'success';
                    var yes = typeof this.yes !== 'undefined' ? this.yes : 1;
                    var no = typeof this.no !== 'undefined' ? this.no : 0;
                    return "<a href='javascript:;' data-toggle='tooltip' title='" + __('Click to toggle') + "' class='btn-change' data-id='"
                        + row.id + "' data-params='" + this.field + "=" + (value ? no : yes ) + "'><i class='fa fa-toggle-on " + (value == yes ? 'text-' + color : 'fa-flip-horizontal text-gray') + " fa-2x'></i></a>";
                }

注意看这里:

image.png

我在toggle的方法体中console一下value和row的值,比较了一下线上和测试的数据,发现field字段在测试上返回的是int类型的0和1,而线上返回的是字符串'0'和'1',针对字符串'0'和'1', 这个判断(value ? no : yes ) 值始终是 no,本来想着直接将value强行转为int类型的,但是这个功能是可以自定义yes和no的值的,如果强转的话,这个功能就会损失很大的灵活性,大家不好奇,这个参数值始终是0,那表现的样式为什么是对的?
看这个:

image.png

这里用了(value == yes ? 'text-' + color : 'fa-flip-horizontal text-gray'),我试了一下,'0' == 0 返回的结果为true,'0' == 1 返回的结果为false,然后查了一下,发现js在两者比较这一块,也会做类型转换的操作,那么不管value是字符串还是int类型,用比较的方式感觉更稳妥了,所以源码改成这样:

image.png

问题解决了,希望这个bug能够在新的版本被采纳
@F4NNIU

最新回复 (0)
返回