JQuery EasyUI의 treegrid 캐스케이드 체크 간단한 개선 사항

6706 단어 jquery easyui
최근에 권한 방면의 물건을 만들어야 하는데 백엔드는 Jquery Easyui treegrid 1.2.6을 사용하는데 아쉽게도 등급 연결 선택 기능이 없습니다
Tree 형식은 다음과 같습니다.
0
----1
--------2
--------3
----4
--------5
--------6
--------7
루트 노드는 0이고 레벨은 0이며 두 개의 하위 노드가 있습니다. 1, 4, 레벨은 1입니다.
하위 노드 1, 4 각각의 다중 노드는 2, 3, 5, 6, 7이고 레벨은 2이다.
요구 사항은 다음과 같습니다.
1. 루트 0을 선택할 때 모든 후대 노드를 선택해야 하며 1-7 모두 선택되어야 한다
2. 루트 0 선택을 취소할 때 모든 후대 노드의 선택을 취소해야 합니다. 1-7 모두 선택을 취소해야 합니다.
3. 노드 1을 선택할 때 1의 부모 노드 0도 선택해야 하지만 0의 다른 하위 노드는 자동으로 선택되지 않고 그대로 유지됩니다.
4. 1 노드를 취소할 때 같은 2단계, 후대 노드 2, 3 모두 취소
5. 2 노드를 선택할 때 1, 0 두 노드를 선택해야 합니다.
6. 2를 취소할 때는 3이 선택되었는지, 있다면 1이 선택되었는지, 3이 선택되지 않았다면 1이 선택되지 않았는지, 0이 선택되었는지 1이나 4가 선택되었는지 확인해야 한다
총결산하다
1. 어떤 노드를 선택할 때 반드시 이 노드 아래의 모든 후대 노드를 선택해야 한다. 반대로 후대 노드의 선택을 취소한다.
2. 어떤 노드를 선택할 때 이 노드의 부 노드를 선택해야 한다. 모든 전 세대 부 노드를 포함한다.
어떤 노드를 취소할 때 이 노드의 형제 노드가 선택되지 않으면 부 노드도 선택을 취소하고,
다시 말하면 부모 노드 아래의 하위 노드가 선택되었는지 확인해야 한다. 만약에 부모 노드가 선택되지 않았다면 부모 노드도 선택을 취소할 것이다.
선인의 노동 성공을 찾다
한 문장을 검색하여, 원작자에게 감사를 드립니다.
treegrid 레벨 선택 또는 깊이 레벨 선택 확장: 두 가지 확장
상기 수요의 1, 2의 일부분을 실현하는 두 가지 방식이 있다.
그러나 노드를 취소할 때 부모 노드가 취소되는지 여부에 문제가 있습니다
나는 주로 두 번째 방식(속성 방식, 비함수 방식)을 사용하는데 여기에 함수를 더해서 부 노드가 취소되어야 하는지 아닌지를 판단한다.
 1 /** 

 2  *                    

 3  * @param {Object} target 

 4  * @param {Object} id   ID 

 5  * @return {TypeName}  

 6  */  

 7 function IsParentHasSelectedChildren(target,id,idField,status)

 8 {

 9     var count=0;

10     var children = target.treegrid('getChildren',id);    

11     var selectNodes = $(target).treegrid('getSelections');//            

12     var p=target.treegrid('find',id);  

13     //  ,   children         ,       ,     children[i]['_parentId']==p[idField]       

14     for(var i=0;i<children.length ;i++  )

15     {

16         var childId = children[i][idField];  

17         for(var j=0;j<selectNodes.length;j++){  

18             if(selectNodes[j][idField]==childId && children[i]['_parentId']==p[idField])  

19                 count++;

20         }

21     }

22     //  ,click    unselect      ,        

23     return count-1>0;

24 }

주로 함수 IsParentHasSelectedChildren을 증가시킵니다. 부모 노드 아래의 아들 노드가 선택된 개수가 0보다 많은지 부모 노드를 취소할지 여부를 판단합니다.
안에서 마지막으로count에서 1을 줄인 것은 현재 클릭 이벤트가onselect 이벤트와 관련이 있기 때문에 자신을 배제한다는 뜻입니다. 여기에 상세한 연구가 없습니다.
함수 selectParent 안에 아홉 번째 줄로 호출된
 
 1 function selectParent(target,id,idField,status){  

 2     var parent = target.treegrid('getParent',id);  

 3     if(parent){  

 4         var parentId = parent[idField];  

 5         if(status)  

 6             target.treegrid('select',parentId);  

 7         else  

 8         {

 9             if (!IsParentHasSelectedChildren(target,parentId,idField)) 10                 target.treegrid('unselect',parentId);  

11         }

12         selectParent(target,parentId,idField,status);  

13     }  

14 }  

 
 
 

좋은 웹페이지 즐겨찾기