Ext樹控件第一次勾選父節點子節點沒選中

  項目中同事提出了這樣一個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);
View Code

    逐行看代碼,懷疑這行代碼有問題,節點展開事件,Ext可能把它作成異步的,上網一查還真是.code

    node.expand();

    網上一哥們說這樣寫就好了,延長一毫秒

    setTimeout(function () { nodeExpand(node); }, 1); //延遲一毫秒執行

    可是通過本屌測試,這明顯不行,而後延長至十毫秒,解決問題.

  注意事項:

    1.setTimeout 執行的函數帶參數的寫法
 
  思惟拓展:   1.node.expand();我有想過這個函數有沒有回調函數,若是在回調函數裏面處理,豈不美哉,可是官方API沒有查到,    若是哪位大神知道好的解決方法,望告訴小弟.
相關文章
相關標籤/搜索