상세 컨텐츠

본문 제목

fancytree

자바스크립트

by e7e 2023. 5. 9. 11:22

본문

프로젝트를 하면 조직도등의 표현에 Tree 컴포넌트를 사용하는 것은 거의 필수에 가깝당!
Tree로 유명한 것은 jqTree, jsTree, fancyTree, zTree가 있고, zTree가 나중에 등장해서 좋아보이기도 하고,
문서도 나름 잘 되어 있어 보이지만, 읽어야 할 양이 많당.
한번 세팅되면 급격히 관심이 없어지지만, 일단 fancyTree부터 정리 한번 해보장

1. 설치

    <script src="//cdn.jsdelivr.net/gh/jquery/jquery@3.6.4/dist/jquery.min.js"></script>
    <link href="//cdnjs.cloudflare.com/ajax/libs/jquery.fancytree/2.38.3/skin-win8/ui.fancytree.min.css" rel="stylesheet">
    <script src="//cdnjs.cloudflare.com/ajax/libs/jquery.fancytree/2.38.3/jquery.fancytree-all-deps.min.js"></script>

2. 기본

    일단 백엔드 없이 구동되는 모습을 확인해 보장 싫음 말공!

   그냥 JSON 데이터, key와 title  속성에 집중해 본당!

    <div id="tree">
    </div>
    <script>
        $(() => {
            const tree = $("#tree").fancytree({
                extensions: ['edit', 'filter'],
                source: [
                    { "key": "101", "title": "HYBE", "addr": "거기", "ceo": "방시혁" },
                    { "key": "102", "title": "YG", "addr": "저기", "ceo": "양현석" },
                    { "key": "103", "title": "JYP", "addr": "요기", "ceo": "박진영" },
                    { "key": "104", "title": "SM", "addr": "고기", "ceo": "이수만" }
                ]
            });
        })
    </script>

 

 AJAX 데이터

data.json 파일에 위 source 속성의 배열을 저장한 후 실행!

    <div id="tree">
    </div>  
    <script>    
        $(() => {
           const tree=$("#tree").fancytree({
                extensions: ['edit', 'filter'],
                source: {
                    url:"./data.json",
                    caches: false
                }
            });
        })
     </script>

3.   data.json을 조금 수정해서 클릭했을 때 하위(children) 요소들을 가져 오도록 수정해 보장.

  "lazy":true 에 주목하장 (lazyLoad 콜백함수와 연동 할 것이당)

{ "key": "100", "title": "HYBE", "addr": "거기", "ceo": "방시혁", "lazy":true },
{ "key": "200", "title": "YG", "addr": "저기", "ceo": "양현석", "lazy":true },
{ "key": "300", "title": "JYP", "addr": "요기", "ceo": "박진영" },
{ "key": "400", "title": "SM", "addr": "고기", "ceo": "이수만" }

hybeIdol.json 파일을 맹글장(하이브소속 아이돌이당)

[
    { "key": "101", "title": "BTS",  "leader": "RM" },
    { "key": "102", "title": "SevenTeen", "leader": "우지" },
    { "key": "103", "title": "NewJeans", "leader": "민지" }
]

ygIdol.json 파일을 맹글장(YG소속 아이돌이당)

[
    { "key": "201", "title": "BlackPink",  "leader": "제니" },
    { "key": "202", "title": "BabyMonster", "leader": "아현" },
    { "key": "203", "title": "BigBang", "leader": "지드래곤" }
]

lazyLoad 콜백함수를 추가하장(가독성을 위해 귀찮지만, 코드 전부 다시 표시)

lazyLoad:function(...) 에 집중!!

data.result가 재밌당. 그 안 url속성에 컨트롤러 URL을 적어 주면 get방식으로 요청해서

돌아온 결과값들을 자식으로 넣어준당!

처음부터 모든 tree값을 가져오지 않고, 필요할 때만 가져오는 방식으로 사용할 수 있당!

    <div id="tree">
    </div>
    <script>
        $(() => {
            const tree = $("#tree").fancytree({
                extensions: ['edit', 'filter'],
                source: [
                    { "key": "100", "title": "HYBE", "addr": "거기", "ceo": "방시혁", "lazy":true },
                    { "key": "200", "title": "YG", "addr": "저기", "ceo": "양현석", "lazy":true },
                    { "key": "300", "title": "JYP", "addr": "요기", "ceo": "박진영" },
                    { "key": "400", "title": "SM", "addr": "고기", "ceo": "이수만" }
                ],
                lazyLoad: function(event,data){
                    console.log("check",data.node);
                    if(data.node.key == "100"){
                        data.result = {
                            url:"hybeIdol.json"
                        }
                    }

                    if(data.node.key == "200"){
                        data.result = {
                            url:"ygIdol.json"
                        }
                    }

                }
            });
        })
    </script>

꼬옥 눈으로 확인하장!

 

4. tree 객체 가져오깅

fancyTree는 문서가 잘 정리되어 있진 않지만, 아래와 같은 부분을 찾을 수 있당!

지친당!. 하지만 이번 기회에 읽고 말것이당

var tree = $.ui.fancytree.getTree("#tree");

예제

https://wwwendt.de/tech/fancytree/demo/index.html

 

통합

https://github.com/mar10/fancytree/wiki/TutorialIntegration

 

Static API

https://wwwendt.de/tech/fancytree/doc/jsdoc/Fancytree_Static.html

 

노드데이터

https://wwwendt.de/tech/fancytree/doc/jsdoc/global.html#NodeData

 

데이터로딩

https://github.com/mar10/fancytree/wiki/TutorialLoadData

 

사용가능 옵션

https://wwwendt.de/tech/fancytree/doc/jsdoc/global.html#FancytreeOptions

 

샘플 설정

https://wwwendt.de/tech/fancytree/demo/sample-configurator.html

 

이벤트 리스트

https://wwwendt.de/tech/fancytree/doc/jsdoc/global.html#FancytreeEvents

 

data 오브젝트

https://wwwendt.de/tech/fancytree/doc/jsdoc/global.html#EventData

 

튜토리얼API

https://github.com/mar10/fancytree/wiki/TutorialApi

 

확장플러그인

https://github.com/mar10/fancytree/wiki/ExtensionIndex

 

플러그인 사용법

https://github.com/mar10/fancytree/wiki/TutorialExtensions

 

잘 안되는 애, 필요한가?

https://github.com/swisnl/jQuery-contextMenu/tree/master/dist

'자바스크립트' 카테고리의 다른 글

시베리안 허숙희의 자바스크립트 비기닝 1  (0) 2023.05.28
html2canvas와 jspdf를 이용 pdf 맹글깅  (0) 2023.05.24
visual studio code emmit 단축키  (0) 2023.04.18
node mongoose  (0) 2023.04.16
리액트(react)  (0) 2023.02.06

관련글 더보기