今天在开发过程中遇到了两个小问题,因为在做树形结构展示,用的是bootstrap的treeview,在获取json data的时候有几点需要注意
1)"pid":5,"id":4,"text":"xx" 这三个属性是必须要获取到的,其中pid为父节点id,id为该条数据的id,text为你要显示的文本
2)"state":{"checked":true} state属性 其中checked为true 意思是说该条被选中,如果为false则未被选中,我在试验"checked":true 没有state属性的时候发现也是好用的,如果这样的话在开发过程中可以根据程序选择用checked:true的形式还是state:{checked:true}
我在开发的时候用的是state属性,由于用了该属性同时发现了一些问题,由于在数据库中没有进行该字段,所以在实现类执行sql的时候用到了case when then else end的判断
代码如下:
sql =" (CASE WHEN (SELECT COUNT(*) FROM T_SM_ROLE_FUNS T2 WHERE T2.FUN_ID=T1.FUN_ID AND T2.ROLE_ID=‘2‘)>=1" +" THEN ‘{checked:true}‘ ELSE ‘{checked:false}‘ END ) AS \"state\"
该判断的意思是,如果有值则checked:true 否则 checked:false
在得到json的过程中得到的形式如下:"state":"{checked:fase}" 但是我想要的json格式是"state":{checked:true} 所以我需要把双引号去掉,只能在前端进行去除,方式是用replace的方式
代码如下:
json数据如下:
var treeData2 = [{"id":"3", "pid" : "", "text":"主页","FUN_ID":"3", "FUN_CD":"5","FUN_NM":"主页", "state": "{ checked: true}"}];
做替换,代码如下:
treeData = JSON.stringify(json); var re = /\:"{checked:/g var lf = /}\"/g var jsonD = treeData.replace(re,‘:{"checked":‘); var jsonN = jsonD.replace(lf,"}");
得到的json数据如下:
var treeData2 = [{"id":"3", "pid" : "", "text":"主页","FUN_ID":"3", "FUN_CD":"5","FUN_NM":"主页", "state": { "checked": true}}];
在这里需要注意的是如果是jsp页面直接执行json串调用treeview的checked对不带双引号的"" ,checked属性是没有要求的,不会报错
但是在讲jsonN传到treeview的时候就出现了错误,要求一定要把双引号加上才可以,错误如下
Unexpected token c in JSON at position 54
所以将双引号加上 ,错误解决