项目中同事提出了这样一个bugnode
问题:异步
第一次勾选父节点子节点居然没选中,逆天了啊ide
初步分析:函数
多是以前代码的逻辑错误形成的,随进入调试阶段...测试
调试中发现该参数为空(原来写代码的也太没素质了),ui
没有内容而后想到没有内容致使下面的子节点不能便利出来,因此出来后没有选中,嘿嘿spa
而后加上该参数,接着查看而后发现bug依然存在,此次该参数有了,可是里面的元素仍是没有啊,纠结....3d
深刻分析: 调试
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可能把它作成异步的,上网一查还真是.code
node.expand();
网上一哥们说这样写就好了,延长一毫秒
setTimeout(function () { nodeExpand(node); }, 1); //延迟一毫秒执行
可是通过本屌测试,这明显不行,而后延长至十毫秒,解决问题.
注意事项:
1.setTimeout 执行的函数带参数的写法
思惟拓展: 1.node.expand();我有想过这个函数有没有回调函数,若是在回调函数里面处理,岂不美哉,可是官方API没有查到, 若是哪位大神知道好的解决方法,望告诉小弟.