Ext树控件第一次勾选父节点子节点没选中
项目中同事提出了这样一个bug
问题:
第一次勾选父节点子节点竟然没选中,逆天了啊
初步分析:
可能是之前代码的逻辑错误造成的,随进入调试阶段...
调试中发现该参数为空(原来写代码的也太没素质了),
没有内容然后想到没有内容导致下面的子节点不能便利出来,所以出来后没有选中,嘿嘿
然后加上该参数,接着查看然后发现bug依然存在,这次该参数有了,但是里面的元素还是没有啊,纠结....
深入分析:

1 rightnode.on('checkchange', function(node, checked) { 2 node.expand(); 3 node.attributes.checked = checked; 4 var flag = false; 5 for (var i = 0; i < changemark.length; i++) 6 if (changemark[i] == node.attributes.id) { 7 flag = true; 8 break; 9 } 10 if (!flag) 11 changemark.push(node.attributes.id); 12 13 node.eachChild(function(child) { 14 child.ui.toggleCheck(checked); 15 child.attributes.checked = checked; 16 var flag = false; 17 for (var i = 0; i < changemark.length; i++) 18 if (changemark[i] == node.attributes.id) { 19 flag = true; 20 break; 21 } 22 if (!flag) 23 changemark.push(node.attributes.id); 24 25 child.fireEvent('checkchange', child, checked); 26 }); 27 }, rightnode);
逐行看代码,怀疑这行代码有问题,节点展开事件,Ext可能把它做成异步的,上网一查还真是.
node.expand();
网上一哥们说这样写就行了,延长一毫秒
setTimeout(function () { nodeExpand(node); }, 1); //延迟一毫秒执行
但是经过本屌测试,这明显不行,然后延长至十毫秒,解决问题.
注意事项:
1.setTimeout 执行的函数带参数的写法
思维拓展:
1.node.expand();我有想过这个函数有没有回调函数,如果在回调函数里面处理,岂不美哉,但是官方API没有查到,
如果哪位大神知道好的解决方法,望告诉小弟.
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步