2014-06-06 1 views
2

jstree를 사용하여 특정 노드에서 떨어지는 것을 허용하지 않는 트리의 깊이를 제한하고 싶습니다. 여기jstree 3 - dnd - 특정 노드로 떨어지는 제한

내 (간체) 코드 :

$('#tree').jstree({ 
    "plugins":["dnd"], 
    "core":{ 
     "check_callback":true 
    }, 
    "dnd":{ 
     "copy":false 
    } 
}).on("move_node.jstree", function(node,nodes){ 
    console.log("node : "+nodes.node.id); 
    console.log("parent : "+nodes.node.parent); 
    console.log("position : "+nodes.position); 
}); 

내가 이전 버전이에 대한 문서를 발견하지만 난 거짓 고전적인 수익을 시도

3 jstree; move_node 함수의 특정 조건에서 아무 것도 변경하지 않습니다. 그래서 내 질문에 간단하게 될 것이라고 생각 : 특정 조건에서 move_node 해제 할 수 있습니다 - 가장 좋은 방법은 특정 노드 (예 : 앞에 삼각형을 표시하지 않는 끌기 허용하지 않을 것입니다 - 및 녹색 십자가 대신 빨간색 십자가) 물론이 노드는 드래그 가능하고 다른 노드와 같이 작동합니다.

답변

1

"types"플러그인을 사용하는 jsTree에서는 특정 노드로의 드롭을 제한 할 수 있습니다. 노드를 지정하고 허용되는 자식 수, "max_children"과 같은 매개 변수를 설정하여 노드 내부에서 허용되는 최대 노드 깊이를 지정할 수 있습니다. "max_depth", "valid_children".

참조 용으로 Demo을 확인하십시오.

최신 jsTree v3 +에서이 "유형"플러그인은 dnd 플러그인에 완전히 구현되지 않았습니다. 당신이 (DND 플러그인에서) 소스 코드 줄 번호 (5036)를 참조하면

// TODO: now check works by checking for each node individually, how about max_children, unique, etc? 
// TODO: drop somewhere else - maybe demo only? 

는 따라서 jsTree의 다음 버전을 기다릴 필요가 같은 의견이 있습니다.

1

This 답변이 문제의 해결책이되어야합니다.

한 부모에서 다른 부모로 노드를 떨어 뜨리는 선택성을 얻으려면 check_callback 함수를 사용해야합니다.

$.jstree.plugins.myPlugin = function (options, parent) { 

    this.check = function (chk, obj, par, pos, more) { 
     if(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; } 
     if ('put here your condition to block dropping') {return false} 
     return true; 
     }; 

    }; 

는 그 다음 jstree 인스턴스 생성에 플러그인의 목록에 'myPlugin'을 추가하는 :

0

또 다른 해결책은 같은 jstree 플러그인을 작성하는 것입니다.