今天在開發過程中遇到了兩個小問題,因爲在做樹形結構展示,用的是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
所以將雙引號加上 ,錯誤解決