jQuery中使用ztree找不到ztreeobj

junqingwuchu007 2017-04-24 10:30:12
如题 代码如下 要实现的功能是点击角色在权限树中勾选该角色已有权限,入参为该角色的权限list。

//勾选单个角色拥有的权限
function getchecked(data){
console.log("in getchecked");
var zTree = $.fn.zTree.getZTreeObj("treeDemo");
console.log("树数据"+zTree);
var modules = data;
//console.log("点击获取的权限:"+modules);
var nodes = zTree.getNodes();
console.log("nodes"+nodes);
let moduleNames = "";
for(var i = 0;i<modules.length;i++){
moduleNames += modules[i].moduleName;
if(i != modules.length-1){
moduleNames += ","
}
}
console.log("权限名"+moduleNames);
if(modules!=null && modules !=''){
for(var i = 0; i < moduleNames.length; i++){
var node = zTree.getNodeByParam("name",moduleNames[i]);
console.log(node);
for(var j = 0; j < nodes.length; j++){
if(node.equals(zTree.getNodeByParam("name",nodes[j].tId))){
zTree.selectNode(node);
zTree.checkNode(node, true, true);
}
}
}
}

实际运行后,树对象 var zTree显示null,在点击时已经预先加载了全部权限的树

下面是树结构和加载全部权限的代码,卡了我两天了,实在是搞不懂为什么拿不到插件自带的属性。求大神指点。

//初使化所有被选中的节点
function initChecked(data){
console.log("in init");
show();
getchecked(data);
}

//获取全部权限
function show(){
console.log("in show");
$.ajax({
type: "GET",
url: "/pcm/role/getModule",
data: {},
dataType: "json",
success: function(data){
var module = tree(data.modules,'');
listdemo(module);
}
});
}

//加载树
function listdemo(data){
console.log("in listdemo");
$(".main-right").mCustomScrollbar({
theme:"minimal-dark",
scrollButtons:{
enable:true,
scrollType:"continuous",
scrollSpeed:20,
scrollAmount:40
},
horizontalScroll:false,
});
var setting = {
check: {
enable: true
},
data: {
simpleData: {
enable: false
}
}
};
var zNodes = data;
$.fn.zTree.init($("#treeDemo"), setting, zNodes);
}

...全文
390 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
junqingwuchu007 2017-04-24
  • 打赏
  • 举报
回复
引用 7 楼 functionsub 的回复:
我说了,你把你的模块名称组合成一整串字符串了,你去遍历这个字符串每次取到的值都是单个字符
var node = zTree.getNodeByParam("name",moduleNames[i]);
这个返回的node肯定都是null,还不明白?? 等于你原来有3个模块叫模块1,模块2,模块3 你的代码执行后moduleNames='模块1,模块2,模块3', 下面的循环里,moduleNames[i]的值分别对应'模','块','1'……你这样node能匹配到才叫有鬼。
啊,才明白我错在哪里。。。感谢大神~ 我结算帖子了,感谢您花时间帮我看代码。
junqingwuchu007 2017-04-24
  • 打赏
  • 举报
回复
引用 5 楼 functionsub 的回复:
??你哪里判断了? 你的node就直接是null了,再调用他的equals能不报错?
是我表达有问题,var node = zTree.getNodeByParam("name",moduleNames[i]); 我这里不是应该赋值给他了吗,然后我再上面做了判断,保证权限集合不为空,那这里应该能用权限名找到对应的node值啊...
functionsub 2017-04-24
  • 打赏
  • 举报
回复
我说了,你把你的模块名称组合成一整串字符串了,你去遍历这个字符串每次取到的值都是单个字符
var node = zTree.getNodeByParam("name",moduleNames[i]);
这个返回的node肯定都是null,还不明白?? 等于你原来有3个模块叫模块1,模块2,模块3 你的代码执行后moduleNames='模块1,模块2,模块3', 下面的循环里,moduleNames[i]的值分别对应'模','块','1'……你这样node能匹配到才叫有鬼。
junqingwuchu007 2017-04-24
  • 打赏
  • 举报
回复
引用 3 楼 functionsub 的回复:
看你这代码,moduleNames是个用逗号分隔的字符串啊。
 if(modules!=null && modules !=''){ 
                 for(var i = 0; i < moduleNames.length; i++){ // 你这里去遍历每个单独的字符串,下面这一行肯定永远都抓不到对应的值
                     var node = zTree.getNodeByParam("name",moduleNames[i]);
                     console.log(node);
                     for(var j = 0; j < nodes.length; j++){
                         if(node.equals(zTree.getNodeByParam("name",nodes[j].tId))){
                             zTree.selectNode(node);
                             zTree.checkNode(node, true, true);
                         }
                         }
                     }
我这里的写法是想获取权限名字,去对照树里面的节点名字,然后节点名字在权限名集合里的就给他checkd属性,打上勾选。 我刚才去掉了“,”的分隔,还是取不到node的值。
functionsub 2017-04-24
  • 打赏
  • 举报
回复
??你哪里判断了? 你的node就直接是null了,再调用他的equals能不报错?
junqingwuchu007 2017-04-24
  • 打赏
  • 举报
回复
引用 1 楼 functionsub 的回复:
ajax是异步执行的啊,,show()函数执行完成后,ajax还没返回,所以listdemo(data)函数还没有执行, 你再立刻紧接着执行getchecked(data); 所以就这时候还没有ztreeobj。
 //初使化所有被选中的节点  
        function initChecked(data){  
            console.log("in init");
            show(function(){
                getchecked(data); // 把getchecked方法当做回调传入
            }); 
        }
 
//获取全部权限
function show(callback){
            console.log("in show");
        $.ajax({
            type: "GET",
            url: "/pcm/role/getModule",
            data: {},

            dataType: "json",
            success: function(data){
                var module = tree(data.modules,'');
                listdemo(module);
                callback && callback(); // 确定数据加载完成后,listdemo函数执行完成后,执行传入的回调函数。
            }
        });
        }
感谢大神,新手基础不够牢固。我这边现在node值又为null了...是怎么回事啊。
 
 if(modules!=null && modules !=''){ 
                 for(var i = 0; i < moduleNames.length; i++){                     
                     var node = zTree.getNodeByParam("name",moduleNames[i]);
                     console.log(node);
                     for(var j = 0; j < nodes.length; j++){
                         if(node.equals(zTree.getNodeByParam("name",nodes[j].tId))){
                             zTree.selectNode(node);
                             zTree.checkNode(node, true, true);
                         }
                         }
                     }
这段代码里面,我用了if判断,怎么还会报null?
functionsub 2017-04-24
  • 打赏
  • 举报
回复
看你这代码,moduleNames是个用逗号分隔的字符串啊。
 if(modules!=null && modules !=''){ 
                 for(var i = 0; i < moduleNames.length; i++){ // 你这里去遍历每个单独的字符串,下面这一行肯定永远都抓不到对应的值
                     var node = zTree.getNodeByParam("name",moduleNames[i]);
                     console.log(node);
                     for(var j = 0; j < nodes.length; j++){
                         if(node.equals(zTree.getNodeByParam("name",nodes[j].tId))){
                             zTree.selectNode(node);
                             zTree.checkNode(node, true, true);
                         }
                         }
                     }
junqingwuchu007 2017-04-24
  • 打赏
  • 举报
回复
感谢大神,新手基础不够牢固。我这边现在node值又为null了...是怎么回事啊。

 if(modules!=null && modules !=''){ 
                 for(var i = 0; i < moduleNames.length; i++){                     
                     var node = zTree.getNodeByParam("name",moduleNames[i]);
                     console.log(node);
                     for(var j = 0; j < nodes.length; j++){
                         if(node.equals(zTree.getNodeByParam("name",nodes[j].tId))){
                             zTree.selectNode(node);
                             zTree.checkNode(node, true, true);
                         }
                         }
                     }

这段代码里面,我用了if判断,怎么还会报null?
functionsub 2017-04-24
  • 打赏
  • 举报
回复
ajax是异步执行的啊,,show()函数执行完成后,ajax还没返回,所以listdemo(data)函数还没有执行, 你再立刻紧接着执行getchecked(data); 所以就这时候还没有ztreeobj。
 //初使化所有被选中的节点  
        function initChecked(data){  
            console.log("in init");
            show(function(){
                getchecked(data); // 把getchecked方法当做回调传入
            }); 
        }
 
//获取全部权限
function show(callback){
            console.log("in show");
        $.ajax({
            type: "GET",
            url: "/pcm/role/getModule",
            data: {},
            dataType: "json",
            success: function(data){
                var module = tree(data.modules,'');
                listdemo(module);
                callback && callback(); // 确定数据加载完成后,listdemo函数执行完成后,执行传入的回调函数。
            }
        });
        }

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧