您的位置:首页 > 其它

jqGrid的treegrid的bug修复

2016-04-27 16:58 281 查看
刚开始使用jqGrid,就碰到了难题。想把列表做成树形的treegrid,在网上查了下jqgrid也正好有这个方法,但是使用的过程中发现个问题,就是传入的数据顺序如果不是一棵树一棵树的排列好的,就会出现节点排序错乱的问题,比如这个树的节点跑到另外一棵树的后面。在官网上面找了好多资料,也没有人说过这个问题,可能没什么人用,也有可能是我使用错误了吧,如果是我使用错误了,官网例子也会出现这个问题。我也不管是我的操作错还是真的bug了,我自己在源码中修改了下。

先说明下我使用的是jqGrid 4.6的版本,后面有修改后的插件

在jqGrid.src 1577行中增加了

<span style="white-space:pre">			</span>/*
增加了给树排序的代码
*/
var tempRowData = [];
var count = -1;
for (var i = 0; i < rowData.length; i++) { //把数据分成树的节点单位
if (rowData[i].match('<tr')) {
count++;
tempRowData[count] = "";
}
tempRowData[count] += rowData[i];
}
var data = '';
for (var i = 0; i < tempRowData.length; i++) {
if (ts.p.data[i].pid == null) {
var dataArry = new Array();
dataArry[0] = tempRowData[i];
sortLeaf(dataArry, tempRowData, ts.p.data, ts.p.data[i].id); //依次排列出树的节点
data += dataArry.join('');
}
}
// $("#" + $.jgrid.jqID(ts.p.id) + " tbody:first").append(rowData.join(''));原来代码
$("#" + $.jgrid.jqID(ts.p.id) + " tbody:first").append(data);
在12655行中增加了

/*
依次查找出树的节点,dataArray是返回数据,tempRowData是树的节点数据,ts包含了树的据节点信息,parentId是父节点
*/
function sortLeaf(dataArray, tempRowData, node, parentId) {
for (var i = 0; i < node.length; i++) {
if (node[i].pid == parentId) {
dataArray[dataArray.length] = tempRowData[i];
sortLeaf(dataArray, tempRowData, node, node[i].id);
}
}
}

这里需要注意的是,因为我在插件中增加了新的方法,所以在jqGrid方法中的colmodel方法和colName方法中必须要加上id和parentId。

插件下载链接:http://download.csdn.net/detail/qq805911956/9515640
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jqgrid bug 源码 treegrid