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

时间: 2024-10-13 12:33:30

ExtJS 动态加载树treepanel的相关文章

jQuery 动态加载树

本案例中用到了jquery的 tree插件,在本文的附件中可以下载 jsp代码: <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request

ExtJS 创建动态加载树

Ext 中导航树的创建有两种方式:1.首先将所有的数据读出来,然后绑定到前台页面.2.每点击一个节点展开后加载子节点.在数据量比较小的时候使用第一种方式加载的会快一些,然而当数据量比较大的时候,我还是建议使用第二种方式的.这里我就来介绍一下第二种树的展示方式. 源码奉上: 1 //创建model 2 Ext.define("treeModel",{ 3 extend:"Ext.data.Model", 4 fields:["OUID","

easyui_tree 复选框 动态加载树

controller动态获取单位用户树 #region 下拉树菜单 /// <summary> /// 获取工作人员树菜单 /// </summary> /// <param name="addid"></param> /// <param name="unitid"></param> /// <returns></returns> public string GetUs

左侧动态加载树,右侧显示树节点的信息

<%@ page contentType="text/html;charset=UTF-8" language="java" %><!DOCTYPE html><!--[if IE 8]> <html lang="en" class="ie8 no-js"> <![endif]--><!--[if IE 9]> <html lang="en

jquery的ztree插件的使用(完成动态加载树型结构)

第一步:在left.jsp中 <script language="JavaScript" src="${pageContext.request.contextPath }/script/jquery-1.4.2.js"></script> <script language="JavaScript" src="${pageContext.request.contextPath }/script/jquery-

ExtJs中动态加载机制研究(转)

觉得写的太好了,怕弄丢了,转一下:http://extjs.org.cn/node/659 昨天我们team对于extjs的动态加载机制做了些深入研究,这里先share下controller加载的结果. 以service registry portlet为例: 比如,在 liferay-portlet.xml中定义了: 所以我们的js的入口点是app.js,这其中创建了Ext.application并且声明了动态加载controller: view source print? 1.Ext.app

Extjs学习----------动态加载js文件(减轻浏览器的压力)

动态加载js文件可以减轻浏览器的压力,本例使用了Ext.window.Window组件,该组件的学习地址:http://blog.csdn.net/z1137730824/article/details/38538277 具体实现步骤: (1)建立dynamic.jsp文件 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String

【JSTREE】动态加载子节点

js中初始化jstree $('#contact-org').jstree({ "data" : { "dataType": 'json', "url":function(node){ return ctxPath + "/v-contact?queryOrg"; }, "data":function(node){ return {"id" : node.id}; } } } } 返回的

AngularJs 动态加载模块和依赖注入

最近项目比较忙额,白天要上班,晚上回来还需要做Angular知识点的ppt给同事,毕竟年底要辞职了,项目的后续开发还是需要有人接手的,所以就占用了晚上学习的时间.本来一直不打算写这些第三方的学习笔记,不过觉得按需加载模块并且成功使用这个确实是个好处,还是记录下来吧.基于本兽没怎么深入的使用requireJs,所以本兽不知道这个和requireJs有什么区别,也不能清晰的说明这到底算不算Angular的按需加载. 为了实现这篇学习笔记知识点的效果,我们需要用到: angular:https://g