Extjs treepanel의ctrl,shift 다중 선택, 연결 기능 실현

최근에 하나의 트리의 다중 선택 기능을 실현해야 하지만 extjs의 다중 선택 모델인 MultiSelectionModel은ctrl과 유사한 다중 선택 기능만 제공하고 shift 연결 기능은 제공하지 않은 것을 발견했다.인터넷에도 이 기능을 실현하는 예가 없어서 onNodeClick 방법을 다시 써서 참고하도록 했습니다.
//  id
var node1 = null;
var mst=new Ext.tree.MultiSelectionModel({

//  ctrl,shift  by menglei
onNodeClick : function(n, e) {
 //  
 var childNodes = n.parentNode.childNodes;
 if (e.shiftKey) {
  if (node1 != null) {
   var v1 = v2 = v3 = 0;
   //  
   for (var i = 0; i < childNodes.length; i++) {
    if (childNodes[i].id == node1) {
     v1 = i;
     break;
    }
   }
   //  shift 
   for (var i = 0; i < childNodes.length; i++) {
    if (childNodes[i].id == n.attributes.id) {
     v2 = i;
     break;
    }
   }
   // alert('v1:'+v1+" v2:"+v2);
   //  
   if (v1 > v2) {
    v3 = v2;
    v2 = v1;
    v1 = v3;
   }
   //  
   this.select(n, e);
   // alert('v1:'+v1+" v2:"+v2);
   //  
   for (var i = 0; i < childNodes.length; i++) {
    if (i >= v1 && i < v2 + 1) {
     this.select(childNodes[i], e,
     e.shiftKey);
    } else {
     continue;
    }
   }
  } else {
   //  
   this.select(n, e);
   node1 = n.attributes.id;
  }

 } else if (e.ctrlKey) {
  this.select(n, e, e.ctrlKey);
  node1 = null;
 } else {
  //  
  this.select(n, e);
  node1 = n.attributes.id;
 }

}
});

좋은 웹페이지 즐겨찾기