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);
}

...全文
366 9 打赏 收藏 转发到动态 举报
写回复
用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函数执行完成后,执行传入的回调函数。
            }
        });
        }
项目详细功能参考项目演示内容即可项目优势:1、项目从零开始到完结 附带视频,源码以及相关辅助资料,适合学习使用,项目也可拿来即用。2、几乎全手写代码,功能流程详细 跟着可以独立完成,附带详细代码相关常见bug 和 调试解决方案,让大家学会跟踪快速解决问题。3、系统后端使用LayUI技术,对页面不精通的小伙伴也可以快速完成精美页面的设计及应用,支持统一后台管理,也可拿来做其他项目通用后台4、针对layui 相关技术点薄弱的学员提供相关技术点学习,让快速上手完成项目研发5、选材来自生活,项目真实感强,可用学习使用和就业面试使用,适合作为面试提高实际项目经验...6、该项目前后端分离,满足前沿技术点..项目技术栈:- 数据库:MySQL8.0- 后端技术:SpringBoot,MyBatisPlus,JWT 等- 日志技术:Log4j- 数据库连接池:druid- 前端技术:LayUI, axios,Echarts,Ztree 等- Web容器:Apache Tomcat 9- 项目管理工具:Maven3.6- 思维导图设计工具:XMIND 8- 开发工具: IDEA2020, WebStorm2020- 数据库设计软件:Power Designer16.5特别提示:1、涉及相关技术点学习,更多侧重大学生或无项目经验以及项目经验较少的学员入门到项目完结项目实战2、项目功能处理大多提供多种解决方式,如跨域访问,更多让大家了解解决方式的同时学会技术点应用3、加入bug的调试以及代码跟踪处理,更好的让学员更多学会如何解决问题

87,904

社区成员

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

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