📌프로젝트를 진행하면서 구현했던 기능들을 정리
- 처음 경험해 본 것이거나
- 구현하는데 있어서 많은 어려움이 있었거나
- 계속 고민했던 부분들
사내 메뉴얼을 효율적이게 사용할 수 있도록 하는 게시판
목적
사이드바에 있는 메뉴얼 카테고리를 html
코드로 하나하나 구현을 했다. 실제 메뉴얼의 데이터로 한게 아니라 UI를 보기 위한 테스트로 작성했다.
📌실제 데이터로 해야한다면?
- 카테고리는 변경이 생길 수 있기 때문에 변화가 생긴다면 코드를 수정해야하는 문제가 생김
- 엄청난 수의 카테고리를 하드코딩 하는 건 무리
따라서 기존에 html
로 구현되어 있는 부분을 서버에서 데이터를 받아 동적으로 생성할 필요가 있다.
대분류 > 중분류 > 소분류
형태이기 때문에 카테고리는 트리형식으로 구현해야 한다.
서버에서 카테고리 리스트를 전송할 수 있다.
FrontEnd에서 어떻게 로직을 구성하느냐에 따라 전송하는 리스트의 데이터 형식이 달라진다. (ex JSON, AJAX... )
어떻게 로직을 구성할지 정한 후 BackEnd에 원하는 데이터 형식 전달 해야한다.
서버에서 오는 데이터로 동적으로 생성해야하기 때문에 javascript
로 구현을 해야한다.
현재 상황에 대해 질문드렸더니 과장님께서 관련 플러그인이 많으니 찾아보라고 말씀해주셨다.
javascript tree plugin
로 검색했을 때 jsTree가 제일 먼저 나오게 되었다.
그외
WHY jsTree 사용
jsTree를 사용해서 카테고리를 구현
{
id : "string" // 노드의 id , required
parent : "string" // 노드의 부모 id, required
text : "string" // 노드의 이름
data : {level : "string"} //노드의 depth(대분류 : 0, 중분류 : 1, 소분류 : 2)
}
data
<div id="jstreeSidebar"></div>
<script>
$('#jstreeSidebar').jstree({
'core' : {
'data' : <%-JSON.stringify(sidebar)%>,
}
});
</script>
loaded.jstree
$('#jstreeSidebar').on('loaded.jstree', function() { // 1
const nodes = $('#jstreeSidebar').jstree(true)._model.data; // 2
let id = 0;
for(let index in nodes) {
if(nodes[index].id !== '#' && nodes[index].data.level === '0') {
id = nodes[index].id; // 3
$('#jstreeSidebar').jstree(true).toggle_node(id); // 4
}
}
});
id === '#'
인 노드는 대분류의 root 노드!select_node.jstree
href
생성 href
로 페이지 이동$('#jstreeSidebar').on('select_node.jstree', function(event, data) { // 1
// 2
const id = data.instance.get_node(data.selected).id;
const page = 1;
const href = 'board/' + id + '/' + page;
//3
window.location.pathname = href;
});
jsTree의 기본 테마
얼른 jsTree에 테마를 적용할 수 있는 방법을 찾아야겠다고 생각한 디자인이었다...
사용한 테마
jstree-bootstrap-theme
1. cdn <head>
에 붙여넣기
<!--jsTree-->
<!--추가-->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jstree-bootstrap-theme@1.0.1/dist/themes/proton/style.min.css" />
<!--기존-->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/themes/default/style.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/jstree.min.js"></script>
2. jstree 생성할 때 theme
key로 설정
<!--jsTree-->
<!--추가-->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jstree-bootstrap-theme@1.0.1/dist/themes/proton/style.min.css" />
<!--기존-->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/themes/default/style.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/jstree.min.js"></script>
적용 후
플러그인을 처음 사용해봤다. 지금까지 이렇게 플러그인을 가져다 쓸만큼 큰 프로젝트를 진행해본 적이 없었다. 그래서 jsTree를 사용해 보면서 지금 상황을 정리하고, 지금 필요한 것을 검색하고, 적용하는 방법까지를 경험할 수 있었다!
하지만 막상 코딩을 하면서 느낀건 document가 전혀 친절하지 않다는 거였다. document를 봐도 도대체 어떻게 쓰는건지 몰라서 구글링에 엄청 의존했다... 다행히 jsTree를 많이 사용해서 그런지 관련 자료들을 꽤 찾을 수 있었다.