• 发现 jqGrid TreeGrid 加载的数据必须要排序
  • 给了两种平滑数据模式尽然不内部递归
  • 所以改了下源码加了个数据二次过滤器扩展

 

数据本该是这样的

jqGrid TreeGrid 加载数据 排序 扩展

结果没排序成这样了 (而且还得是从根节点到子节点整体排序)

jqGrid TreeGrid 加载数据 排序 扩展

 

1. loadFilters: 数据过滤器扩展 (顺带把ParentId为非字符串类型导致初始化后没闭合bug解决了) 

$.extend($.jgrid.defaults, {
        loadFilter: function (d) {

            function compare(name, minor) {
                return function (o, p) {
                    var a, b;
                    if (o && p && typeof o === 'object' && typeof p === 'object') {
                        a = o[name];
                        b = p[name];
                        if (a === b) {
                            return typeof minor === 'function' ? minor(o, p) : 0;
                        }
                        if (typeof a === typeof b) {
                            return a < b ? -1 : 1;
                        }
                        return typeof a < typeof b ? -1 : 1;
                    } else {
                        thro("error");
                    }
                }
            }
            function rawdata(r, parentField) {
                if (!(r instanceof Array)) {
                    r[parentField] = r[parentField].toString(); //转string初始化才会闭合
                    r['isLeaf'] = true;
                    return r;
                }
                var datatmp = [];
                for (var i = 0; i < r.length; i++) {
                    var children = r[i]['children'];
                    r[i]['children'] = null; 
                    r[i][parentField] = r[i][parentField].toString(); //转string初始化才会闭合
                    r[i]['isLeaf'] = !children;
                    datatmp.push(r[i]);
                    if (children) datatmp = datatmp.concat(rawdata(children, parentField));
                }
                return datatmp;
            }

            var data = d.rows;
            var idField, treeField, parentField, seqField, level_field;
            idField     = this.p.treeReader.id_field || 'id';
            parentField = this.p.treeReader.parent_id_field || 'pid';
            levelField  = this.p.treeReader.level_field || idField//'level'
            seqField    = this.p.treeReader.seq_field || idField//'seq' // 注意:绑定上是显示字段用 treeField 

            if(seqField != idField)  data.sort(compare(levelField, compare(seqField)));
            else data.sort(compare(seqField) );

            var i, l, treeData = [], tmpMap = [];
            for (i = 0, l = data.length; i < l; i++) {
                tmpMap[data[i][idField]] = data[i];
            }
            for (i = 0, l = data.length; i < l; i++) {
                if (tmpMap[data[i][parentField]] && data[i][idField] != data[i][parentField]) {
                    if (!tmpMap[data[i][parentField]]['children'])
                        tmpMap[data[i][parentField]]['children'] = []; 
                    tmpMap[data[i][parentField]]['children'].push(data[i]);
                } else { 
                    data.sort(function (a, b) { return a[seqField] - b[seqField]; }); //从小到大排序
                    treeData.push(data[i]);
                }
            }
            d.rows = rawdata(treeData, parentField);
            return d;
        }
    });
xxoo

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-07-31
  • 2021-08-04
  • 2022-12-23
  • 2022-12-23
  • 2021-09-02
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-09
  • 2022-01-14
相关资源
相似解决方案