David의 반응은 훌륭하고 효율적으로 보입니다. a_attr 속성을 사용하여 다른 노드를 구별 할 수 있고이를 기반으로 다른 컨텍스트 메뉴를 생성 할 수있는 솔루션의 또 다른 변형을 찾았습니다.
아래 예에서는 두 가지 유형의 노드 폴더 및 파일을 사용했습니다. 나는 glyphicon을 사용하여 다른 아이콘도 사용했습니다. 파일 유형 노드의 경우 컨텍스트 메뉴 만 가져와 이름을 바꾸고 제거 할 수 있습니다. 폴더의 경우 모든 옵션이 있습니다. 파일 생성, 폴더 생성, 이름 바꾸기, 제거.
전체 코드 스 니펫은 https://everyething.com/Example-of-jsTree-with-different-context-menu-for-different-node-type을 참조하세요.
$('#SimpleJSTree').jstree({
"core": {
"check_callback": true,
'data': jsondata
},
"plugins": ["contextmenu"],
"contextmenu": {
"items": function ($node) {
var tree = $("#SimpleJSTree").jstree(true);
if($node.a_attr.type === 'file')
return getFileContextMenu($node, tree);
else
return getFolderContextMenu($node, tree);
}
}
});
초기 json 데이터는 다음과 같으며 노드 유형은 a_attr 내에서 언급됩니다.
var jsondata = [
{ "id": "ajson1", "parent": "#", "text": "Simple root node", icon: 'glyphicon glyphicon-folder-open', "a_attr": {type:'folder'} },
{ "id": "ajson2", "parent": "#", "text": "Root node 2", icon: 'glyphicon glyphicon-folder-open', "a_attr": {type:'folder'} },
{ "id": "ajson3", "parent": "ajson2", "text": "Child 1", icon: 'glyphicon glyphicon-folder-open', "a_attr": {type:'folder'} },
{ "id": "ajson4", "parent": "ajson2", "text": "Child 2", icon: 'glyphicon glyphicon-folder-open', "a_attr": {type:'folder'} },
];
파일 및 폴더를 만드는 contect 메뉴 항목의 일부로 파일 동작으로 아래 유사한 코드를 사용합니다.
action: function (obj) {
$node = tree.create_node($node, { text: 'New File', icon: 'glyphicon glyphicon-file', a_attr:{type:'file'} });
tree.deselect_all();
tree.select_node($node);
}
폴더 작업으로 :
action: function (obj) {
$node = tree.create_node($node, { text: 'New Folder', icon:'glyphicon glyphicon-folder-open', a_attr:{type:'folder'} });
tree.deselect_all();
tree.select_node($node);
}