The 'lines' property will be supported in next version. You can extend a new method 'showLines' to achieve this functionality. The 'showLines' method will also be added into next version.
$.extend($.fn.treegrid.methods,{
showLines:function(jq){
return jq.each(function(){
var target = this;
var t = $(target);
var opts = t.treegrid('options');
if (opts.lines){
t.treegrid('getPanel').addClass('tree-lines');
} else {
t.treegrid('getPanel').removeClass('tree-lines');
return;
}
t.treegrid('getPanel').find('span.tree-indent').removeClass('tree-line tree-join tree-joinbottom');
t.treegrid('getPanel').find('div.datagrid-cell').removeClass('tree-node-last tree-root-first tree-root-one');
var roots = t.treegrid('getRoots');
if (roots.length > 1){
_getCell(roots[0]).addClass('tree-root-first');
} else if (roots.length == 1){
_getCell(roots[0]).addClass('tree-root-one');
}
_join(roots);
_line(roots);
function _join(nodes){
$.map(nodes, function(node){
if (node.children && node.children.length){
_join(node.children);
} else {
var cell = _getCell(node);
cell.find('.tree-icon').prev().addClass('tree-join');
}
});
var cell = _getCell(nodes[nodes.length-1]);
cell.addClass('tree-node-last');
cell.find('.tree-join').removeClass('tree-join').addClass('tree-joinbottom');
}
function _line(nodes){
$.map(nodes, function(node){
if (node.children && node.children.length){
_line(node.children);
}
});
for(var i=0; i<nodes.length-1; i++){
var node = nodes[i];
var level = t.treegrid('getLevel', node[opts.idField]);
var tr = opts.finder.getTr(target, node[opts.idField]);
var cc = tr.next().find('tr.datagrid-row td[field="' + opts.treeField + '"] div.datagrid-cell');
cc.find('span:eq('+(level-1)+')').addClass('tree-line');
}
}
function _getCell(node){
var tr = opts.finder.getTr(target, node[opts.idField]);
var cell = tr.find('td[field="'+opts.treeField+'"] div.datagrid-cell');
return cell;
}
})
}
})
Usage example:
$('#tg').treegrid({lines:true}).treegrid('showLines');
I tried to extend the new method 'showLines' that you've mentioned above. But error occured!
TypeError: node is undefined[在此错误处中断]
var tr = opts.finder.getTr(target, node[opts.idField]);
And I used js-create treegrid way, not html way. FYI:
$('#resourceTree').treegrid({
url:'resource.do?method=getDynamicTreegridData',
method: 'get',
columns:[[
{field:'name', title:'name', width:190,editor:'text'}
]],
lines:true,
showHeader:false,
onClickRow: onClickTreeRow,
border:false,
idField: 'id',
treeField: 'name'
});
$('#resourceTree').treegrid({lines: true}).treegrid('showLines');