項目中同事提出了這樣一個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沒有查到, 若是哪位大神知道好的解決方法,望告訴小弟.