ExtJS 动态加载树treepanel

先来看看效果:

一、新建一个TreeStore,并添加根节点

Ext.define(‘Demo1.store.TreeDemoStore‘, {
    extend: ‘Ext.data.TreeStore‘,
    root: {
        text: ‘目录树‘,
        id: 0
    }
});

二、在view中添加treepanel,绑定TreeDemoStore

Ext.define(‘Demo1.view.MyViewport‘, {
    extend: ‘Ext.container.Viewport‘,
    initComponent: function () {
        var me = this;

        Ext.applyIf(me, {
            items: [
                {
                    xtype: ‘treepanel‘,
                    id: ‘treeDemo‘,
                    height:500,
                    store: ‘TreeDemoStore‘,
                    autoScroll: true
                }
            ]
        });

        this.callParent(arguments);
    }

});

三、在controller的onLaunch方法中加载树

Ext.define(‘Demo1.controller.MyController‘, {
    extend: ‘Ext.app.Controller‘,

    init: function (application) {
    },

    onLaunch: function () {
        //请求数据列表(数据保存在哪里就随你了,这里我先写死)id:节点id;text:节点名称;pid:父节点id
        var info = [
            {
                id: ‘1‘, text: ‘二级节点1‘, pid: ‘0‘
            },
            {
                id: ‘2‘, text: ‘二级节点2‘, pid: ‘0‘
            },
            {
                id: ‘3‘, text: ‘二级节点3‘, pid: ‘0‘
            },
            {
                id: ‘4‘, text: ‘二级节点1-三级节点1‘, pid: ‘1‘
            },
            {
                id: ‘5‘, text: ‘二级节点1-三级节点2‘, pid: ‘1‘
            },
            {
                id: ‘6‘, text: ‘二级节点2-三级节点1‘, pid: ‘2‘
            },
            {
                id: ‘7‘, text: ‘二级节点2-三级节点2‘, pid: ‘2‘
            },
            {
                id: ‘8‘, text: ‘二级节点2-三级节点1-四级节点1‘, pid: ‘6‘
            },
            {
                id: ‘9‘, text: ‘二级节点2-三级节点1-四级节点2‘, pid: ‘6‘
            }
        ];
        var store = Ext.data.StoreManager.lookup(‘TreeDemoStore‘);
        var root = store.getRoot();
        appendTreeChildNodes(root, 0, info);
    }


});

//根据父节点id加载子节点
function appendTreeChildNodes(node, pid, infos) {
    var children = [];
    var childModel = {};
    for (var i = 0; i < infos.length; i++) {
        if (infos[i].pid == pid) {
            childModel = {};
            childModel.text = infos[i].text;;
            childModel.id = infos[i].id;
            childModel.pid = infos[i].pid;
            children.push(childModel);
            infos.splice(i, 1);
            i--;
        }
    }
    node.appendChild(children);

    if (node.hasChildNodes()) {
        node.eachChild(function (child) {
            appendTreeChildNodes(child, child.get(‘id‘), infos); //递归
        });
    }
    else {
        node.set(‘leaf‘, true);
    }
}

ok了,就这么简单,下面附上源码:ExtJSDemo-TreePanel

ExtJS 动态加载树treepanel,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。