解决 jstree 中 Uncaught TypeError: Cannot read property 'state' of undefined 报错

之前后台使用 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"]
  });
});
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值