之前后台使用 jstree
做权限控制,于是此次语音后台的权限也移植过来了,但在使用时遇到了麻烦。
如上图,北京信息有限公司one
做为集团公司,旗下有两家子公司,子公司的权限来源于平台授予给集团公司的权限,也就造成了 jstree
渲染时,数据结构不一样。
// 添加权限 $(document).on('click', '.addrole', function() { $("#tree_2").data('jstree', false).empty().jstree({ "core" : { "themes" : { "responsive": false }, "check_callback" : true, 'data' : { 'url' : '/url/' + $(this).attr('data-id') } }, "types" : { "default" : { "icon" : "fa fa-folder icon-state-warning icon-lg" }, "file" : { "icon" : "fa fa-file icon-state-warning icon-lg" } }, "plugins" : ["checkbox"] }); });
上面的代码是之前的平台的,我以为只需把对应的示例数据给清理掉再渲染就可以了。但看官方文档发现,需要使用对应的 $.jstree.destroy ()
来显示清除树的结构,否则,即使之前清除了数据,但还是之前的树。由于子公司的权限要小于集团公司的,于是变会出现下图的报警。
解决的方法只需在清除树前加上此 $('#tree_2').jstree("destroy");
即可
// 添加权限 $(document).on('click', '.addrole', function() { $('#tree_2').jstree("destroy"); $("#tree_2").data('jstree', false).empty().jstree({ "core" : { "themes" : { "responsive": false }, "check_callback" : true, 'data' : { 'url' : '/url/' + $(this).attr('data-id') } }, "types" : { "default" : { "icon" : "fa fa-folder icon-state-warning icon-lg" }, "file" : { "icon" : "fa fa-file icon-state-warning icon-lg" } }, "plugins" : ["checkbox"] }); });