前言
就今天,这个问题必须解决。这个问题必须记录。关于vue
使用element-ui
的el-checkbox-group
问题。这个问题是导致整个项目复杂度变高的主要原因!
今天在搞一个比较久的项目,多久呢?年前的,几个哥们一块写的,到现在才差不多搞定!我搞那个pc考试端的东西,但是一个多选题给我难住了。
开搞
1.第一版的时候用了el-checkbox
。当时前后端都商议好了要让前端传一个大的对象。这个对象里面有单选,多选,判断,填空和简答五种题型的各个题的答案。每个题答案都是以题的编号为键,把值写进数组里充当值。(这里我声明,要让后端解析json
,那还是把后端杀了吧!后端解析一个大大的json
就相当于是在解析字符串,即使用json
工具也要解析好长时间,并且写一大堆看似很厉害,但是都是无用功的代码。由于传的字符串的格式千奇百怪,写的代码肯定很多就是那种不能复用的那种,这严重违反了java的封装特性。以后谁要你在后端用java解析json
,你还是和他干一架吧。让他知道你的决心。)
2.起初,我以为要让后端接一个大对象,我就直接封装一个就行了。谁知道要的格式这么怪
3.关键是多选题这东西,选项不好整,我得创建一个二维数组来接它。js里面还没有二维数组,我只能强行创建了。
4.搞了这个玩意之后,我的思路仿佛开阔了。我把所有的题和答案都放进了数组。刚开始还在感叹,数组真香。之后,我这个封装大对象的方法不会写,就让大哥写了。(封装大对象这个思路不是我的,我只能让他写!)之后就出问题了!先是答题卡由于题目的编号不对,在初始化的时候答题卡根本不出来!之后就是,答题卡根本不按选择的选项来改变颜色!
5.今天,终于完美的解决了这些问题。我们用了el-checkbox-group
,但是这个东西又引入了一个新的问题Cannot read property ‘length’ of undefined
。今天,带哥在官网上看了好长时间的样例,才明白,它这个东西要绑定一个已经存在了的一维数组。注意:是已经存在了的,一维数组。但是在后端返回的数据中没有空的一维数组。这可怎么办?这时候就要给一个对象强行搞一个属性了。(由于js语言是弱类型的,需要给一个对象添加新的属性,就直接 赋值就完了)
5.在使用答题卡的时候,直接把遍历这个对象里的数组,看看它是否选了答案,如果选了,那就把对应下标的按钮修改颜色就行!
谨记:尽量让前端处理json
!!!!!!!!!