2013-02-20 3 views
0

이것은 jQuery jqGrid에 대한 질문입니다. 트리 그리드를 특정 수준으로 확장하는 함수가 필요합니다. 나는 collapseRow, expandRow, collapseNode 및 expandRow를 사용하여 직접 시도했다. 그러나 collapseRow/expandRow는 재귀 적입니다. 따라서 모든 행에서 이러한 함수를 호출하는 것은 실제로 느립니다. 따라서 jqgrid에 hideRow 및 showRow 함수를 추가했습니다. 나는 나무를 일정한 수준으로 확장하고 붕괴시키는 데 성공했다. 그러나 트리가 확장되면 레벨 3으로, 최상위 레벨에서 삼각형을 클릭하여 트리를 닫으면됩니다. 일부 확장 행이 아직 있습니다.jquery jqgrid treegrid 특정 레벨로 확장

이것은 jqgrid에서 추가 한 기능입니다.

hideRow: function (record) { 
    this.each(function(){ 
     $(this.rows.namedItem(record.id)).css("display","none"); 
    });   
}, 
showRow: function (record) { 
    this.each(function(){ 
     $(this.rows.namedItem(record.id)).css("display",""); 
    });   
}, 

이러한 기능을 호출하는 방법입니다. (일부 컨텍스트는 생략했지만 도로 블록이 아니어야합니다.)

var len = me.gjson.datastr[me.reader_root].length; 
for (var i=len-1; i>-1; i--) { 
    var one_node = jQuery(me.gid).getInd(i+1,true); 
    one_node._id_ = one_node.id; 
    if (parseInt(me.gjson.datastr[me.reader_root][i].level)<me.expand_level) { 
     jQuery(me.gid).jqGrid('expandNode',one_node); 
    } else { 
     jQuery(me.gid).jqGrid('collapseNode',one_node); 
    } 
} 

for (var i=0; i<len; i++) { 
    var one_node = jQuery(me.gid).getInd(i+1,true); 
    one_node._id_ = one_node.id; 
    if (parseInt(me.gjson.datastr[me.reader_root][i].level)<me.expand_level+1) { 
     jQuery(me.gid).jqGrid('showRow',one_node); 
    } else { 
     jQuery(me.gid).jqGrid('hideRow',one_node); 
    } 
} 

나는 jqGrid 코드를 추적했습니다. "expanded"값이 collapseNode/expandNode 내에 올바르게 설정되었음을 보여줍니다. 그러나 최상위 레벨에서 삼각형을 클릭하여 전체 트리를 축소하면 "확장 된"값이 다른 값으로 설정됩니다. 그래서 문제는 무엇이 원인 일 수 있는가? 미리 감사드립니다.

답변

0

더러운 해결책을 직접 얻었습니다. collapseNode와 expandNode에 2 줄을 추가했습니다.

expandNode : function(rc) { 
    return this.each(function(){ 
     if(!this.grid || !this.p.treeGrid) {return;} 
     var expanded = this.p.treeReader.expanded_field, 
     parent = this.p.treeReader.parent_id_field, 
     loaded = this.p.treeReader.loaded, 
     level = this.p.treeReader.level_field, 
     lft = this.p.treeReader.left_field, 
     rgt = this.p.treeReader.right_field; 

     if(!rc[expanded]) { 
      var id = $.jgrid.getAccessor(rc,this.p.localReader.id); 
      var rc1 = $("#"+$.jgrid.jqID(id),this.grid.bDiv)[0]; 
      var position = this.p._index[id]; 
      if($(this).jqGrid("isNodeLoaded",this.p.data[position])) { 
       rc[expanded] = true; 
       this.p.data[position][expanded] = true; // <--- add this line in jqgrid.src.js 
       $("div.treeclick",rc1).removeClass(this.p.treeIcons.plus+" tree-plus").addClass(this.p.treeIcons.minus+" tree-minus"); 
      } else if (!this.grid.hDiv.loading) { 
       rc[expanded] = true; 
       $("div.treeclick",rc1).removeClass(this.p.treeIcons.plus+" tree-plus").addClass(this.p.treeIcons.minus+" tree-minus"); 
       this.p.treeANode = rc1.rowIndex; 
       this.p.datatype = this.p.treedatatype; 
       if(this.p.treeGridModel == 'nested') { 
        $(this).jqGrid("setGridParam",{postData:{nodeid:id,n_left:rc[lft],n_right:rc[rgt],n_level:rc[level]}}); 
       } else { 
        $(this).jqGrid("setGridParam",{postData:{nodeid:id,parentid:rc[parent],n_level:rc[level]}}); 
       } 
       $(this).trigger("reloadGrid"); 
       rc[loaded] = true; 
       if(this.p.treeGridModel == 'nested') { 
        $(this).jqGrid("setGridParam",{postData:{nodeid:'',n_left:'',n_right:'',n_level:''}}); 
       } else { 
        $(this).jqGrid("setGridParam",{postData:{nodeid:'',parentid:'',n_level:''}}); 
       } 
      } 
     } 
    }); 
}, 
collapseNode : function(rc) { 
    return this.each(function(){ 
     if(!this.grid || !this.p.treeGrid) {return;} 
     var expanded = this.p.treeReader.expanded_field; 
     if(rc[expanded]) { 
      rc[expanded] = false; 
      var id = $.jgrid.getAccessor(rc,this.p.localReader.id); 
      this.p.data[this.p._index[id]][expanded] = false; // <--- add this line in jqgrid.src.js     
      var rc1 = $("#"+$.jgrid.jqID(id),this.grid.bDiv)[0]; 
      $("div.treeclick",rc1).removeClass(this.p.treeIcons.minus+" tree-minus").addClass(this.p.treeIcons.plus+" tree-plus"); 
     } 
    }); 
}, 

그런데 왜이 두 줄이 필요한지 묻지 마십시오. 나는 나 자신을 모른다. 주부가 전선을 색상과 일치시킴으로써 단락을 고정시킨 것과 같습니다. 그러나 그녀는 단락 회로가 무엇인지 모를 수도 있습니다.

관련 문제