jstree点击一次执行两次的问题
应产品需求,用jstree写了一个tree,但是却有一个bug,记录一下bug的修改过程及方法,希望可以帮助更多的人
bug成因
/**
* 分配权限
* @param a 分配用户的id
*/
assignRole = function (a) {
$.ajax({
url: "xxx",
type: 'POST',
cache: false,
data:{
token:token,
roleId:a,
},
dataType:"json",
success : function(data) {
$('#menuTree').data('jstree', false).empty();
$('#menuTree').jstree({
"plugins": ["checkbox", "types", "themes"],
"types": {
"default": {
"icon": false // 关闭默认图标
},
},
'core': {
'data': data
}
});
},
});
};
每次点击按钮都会调用这个方法,重新加载jstree,问题在于加载的次数会被累计,当我勾选节点的时候,点击一次节点,会执行加载tree的次数
bug修改
首先当然是某度,发现有相同的问题,但是没有解决方法,于是乎自己想办法,首先执行次数的问题,是被绑定的,使用了bind(),看了一下执行次数
$('#menuTree').bind("activate_node.jstree", function (obj, e) {
// 处理代码
// 获取当前节点
// debugger
// e.node.state.selected?false:true
console.log(e.node.state.selected)
// console.log(e.node)
// var currentNode = e.node;
});
发现确实和tree的渲染次数有关,解决方法是每次渲染tree的时候,对tree进行一次解绑就好了
/**
* 分配权限
* @param a 分配用户的id
*/
assignRole = function (a) {
$.ajax({
url: "xxx",
type: 'POST',
cache: false,
data:{
token:token,
roleId:a,
},
dataType:"json",
success : function(data) {
$('#menuTree').data('jstree', false).empty();
$('#menuTree').unbind() // tree解绑
$('#menuTree').jstree({
"plugins": ["checkbox", "types", "themes"],
"types": {
"default": {
"icon": false // 关闭默认图标
},
},
'core': {
'data': data
}
});
},
});
};
以上,解决办法~