jquery easyui tree实现延迟

来源:互联网 发布:C#数组排序 编辑:程序博客网 时间:2024/05/29 07:37

这例子是官方的demo。可帮助我们理解tree延迟加载的原理,其中涉及到树的基本遍历算法。

function myLoadFilter(data, parent){var state = $.data(this, 'tree');    function setData(){    var serno = 1;        var todo = [];        for(var i=0; i<data.length; i++){            todo.push(data[i]);        }        //深度优先遍历树节点        while(todo.length){            var node = todo.shift();            if (node.id == undefined){            node.id = '_node_' + (serno++);            }            if (node.children){                node.state = 'closed';               //实现延迟加载的关键               //将children先缓存再置空               //第一次渲染时就渲染不到children节点了                node.children1 = node.children;                node.children = undefined;                todo = todo.concat(node.children1);            }        }        state.tdata = data;    }    function find(id){    var data = state.tdata;    var cc = [data];    while(cc.length){    var c = cc.shift();    for(var i=0; i < c.length; i++) {    var node = c[i];    if (node.id == id){    return node;    } else if (node.children1){    cc.push(node.children1);    }    }    }    return null;    }        setData();        var t = $(this);    var opts = t.tree('options');    //在展开节点前将children重置回清空前的属性    opts.onBeforeExpand = function(node){    var n = find(node.id);    //已经展开,返回    if (n.children && n.children.length){return}    if (n.children1){    var filter = opts.loadFilter;    opts.loadFilter = function(data){return data;};    t.tree('append',{    parent:node.target,    data:n.children1    });    opts.loadFilter = filter;    n.children = n.children1;    }    };return data;}


0 0