반응형

이번글은 ajax 비동기 통신으로 서버를 통해 DB에서 데이터를 조회해 온 다음, 해당 데이터를 가지고 jsTree를 구성하여 메뉴 트리를 만드는 방법에 대해 기록한다.


ajax 비동기 DB에서 데이터 가져와서 jsTree 구성하는 방법

1. 먼저, jsTree를 사용하기 위해서는 jstree js파일과 css 파일이 필요하다. 그래서, 아래와 같이, 파일을 다운로드해서 경로에 저장하던지, 아니면 script 태그 내에 선언하여 세팅한다.

<script src="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/jstree.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

 

 

2. ajax 비동기 통신을 하여 db에 있는 데이터를 조회한다.

, setTreeView : function() {
	let param = {
		'MENUID' : 'TEST'
	};
        	
	let json = netUtil.sendJsonData("/test/json//treeMenu.data", param);

	console.log("tree data : ", json);
	
    // jsTree 적용
	$('#menuTree').jstree({
		'core': {
			'data': this.processLocationData(json.data)
		}
    });
}

 

html

<html>
<body>
<div id='menuTree' name='menuTree'></div>
</body>
</html>

 

3. 서버에서 가져온 데이터를 가지고, 각 트리 노드에 id와 text를 받은 데이터로 매핑시키고 parent를 트리 구조에 맞게 매핑 시킨다.

, processLocationData: function(rawData) {
        var treeData = []; // 트리메뉴
        var nodeMap = {}; // 중복 체크

        rawData.forEach(function(item) {
            var divisionId = 'division_' + item.DIVISION;
            var areaId = 'area_' + item.AREAKY;

            // DIVISION
            if (!nodeMap[divisionId]) {
                nodeMap[divisionId] = {
                    id: divisionId,
                    text: item.DIVISION,
                    parent: '#',
                    type: 'DIVISION'
                };
                treeData.push(nodeMap[divisionId]);
            }

            // AREAKY
            if (!nodeMap[areaId]) {
                nodeMap[areaId] = {
                    id: areaId,
                    text: item.AREAKY,
                    parent: divisionId,
                    type: 'AREAKY'
                };
                treeData.push(nodeMap[areaId]);
            }
        });

        return treeData;
    }
}

 

 

그렇게 하고 나서, 해당 treeData를 return 시키면 된다.

여기서, treeData의 경우에는 아래와 같이, json 형식과 같은 데이터 구조로 만들면 된다.

물론, html 형식으로도 사용하기는 하는데, ajax로 서버에서 데이터를 가져오기 때문에 json 형식으로 사용했다.

var treeData = [
	{ "id": "Test", "parent": "#", "text": "Test"}
];

 

위의 방식대로 진행하면 아래와 같이 jsTree가 완성된다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기