最近做了一个前端用extjs的项目,我主要的工作是用extjs显示一棵树,并且根据不同的文件夹显示不同的menu
在动态显示树的时候,有两点比较重要:
1.数据库结构——会直接影响查询树数据的难度
2.树的读取方式——一种是在初始化的时候把所有的树节点都读取出来,不再去查询数据库,另一种是只查询根节点,每次点击的时候去数据库查询(这两种方式会有不同的写法,写逻辑的时候要注意一下)
数据库定义:
1.文件夹表 存储所有非叶子节点
2.文件表 存储所有叶子节点
取得根节点sql文:
SELECT
FOLDERID AS ID
,FOLDERTITLE AS TEXT
,FREEFOLDERFLAG AS FLAG
,FOLDERIDPATH AS PATH
FROM
T_FOLDER
WHERE
PARENTFOLDERID IS NULL
AND FCCID = ?
取得叶子节点sql文:
SELECT
FOLDERID AS ID
,FOLDERTITLE AS TEXT
,''FALSE'' AS STRLEAF
,FREEFOLDERFLAG AS FLAG
,FOLDERIDPATH AS PATH
,'''' AS VERSION
FROM
T_FOLDER
WHERE
PARENTFOLDERID = ? and DELETEFLAG <> 1
union
SELECT
FILEID AS ID
,FILETITLE AS TEXT
,''TRUE'' AS STRLEAF
,'''' AS FLAG
,'''' AS PATH
,LASTRELEASEVERSION AS VERSION
FROM
T_FILE
WHERE
FOLDERID = ? and DELETEFLAG <> 1
order by STRLEAF,TEXT
因为数据是存在两个不同的表中的,所以取得叶子节点的时候用union的方式读取数据