ExtJS中TreeGrid的用法

如果您是第一次使用ExtJS的TreeGrid的话,我相信总会有一些小麻烦的,下面就来说一说ExtJS中TreeGrid的使用。

本人使用的ExtJS版本为4.0.7,并且使用了MVC模式,如果不了解ExtJS的MVC模式的话我个觉得还是有必要去学学的,

学完后你肯定会喜欢上的。

其实在ExtJS中并没有TreeGrid这么一个类,这个说法是从EasyUI中借用过来的,ExtJS中的TreeGrid功能已经合在了Ext.tree.Panel中。

TreeGrid显示出来大概是这个样子:

下面是这个例子的源码:

View:

Ext.define("node.view.NodeListPanel", {
    extend : "Ext.tree.Panel",
    alias : "widget.nodelistpanel",
    title : "节点管理",
    columnLines : true,
    region: 'center',
    root:{
        id:'root',
        name:'节点管理',
        expanded:true
    },
    columns: [{
        xtype : 'treecolumn',
        header: '节点名称',  dataIndex: 'name', sortable:false,flex:1
    }, {
        header: '节点编码', dataIndex: 'code',align : 'center',sortable:false,width:150
    }, {
        header: '节点IP',  dataIndex: 'ip', align : 'center',sortable:false,width:150
    }, {
        header: '端口号', dataIndex: 'port',align : 'center',sortable:false,width:50
    }, {
        header: '节点描述', dataIndex: 'desc',align : 'center',sortable:false,width:200
    }],
    loadMask:{
        msg : '正在加载数据,请稍等...'
    },
    store : Ext.create('node.store.NodeStore'),
    //store : "NodeStore",
    renderTo: Ext.getBody()
});

Store:

Ext.define("node.store.NodeStore", {
    extend : 'Ext.data.TreeStore',
    //model : 'node.model.Node',//用model传递不了数据
    proxy : {
        type : 'ajax',
        url : 'data/NodeTree.json',
        reader : 'json',
        autoLoad : true
    },
    fields : [{
        name: 'id',
        type: 'string'
    }, {
        name: 'name',
        type: 'string'
    }, {
        name: 'code',
        type: 'string'
    }, {
        name: 'ip',
        type: 'string'
    }, {
        name: 'port',
        type: 'string'
    }, {
        name: 'desc',
        type: 'string'
    }]

});

NodeTree.json :

{
    "id":"root",
    "leaf":false,
    "name" : "root",
    "children":[{
        "id":"1",
        "leaf":true,
        "name" : "公安",
        "code" : 452363214,
        "ip" : "192.168.0.203",
        "port" : 8080,
        "desc" : "公安节点"
    }, {
        "id":"4",
        "leaf":true,
        "name" : "法院",
        "code" : 452364587,
        "ip" : "192.168.0.204",
        "port" : null,
        "desc" : "法院节点"
    }, {
        "id":"9",
        "leaf":true,
        "name" : "检查院",
        "code" : 452312365,
        "ip" : "192.168.0.205",
        "port" : null,
        "desc" : "检查院节点"
    }, {
        "id":"10",
        "leaf":false,
        "name" : "纪检委",
        "code" : 45234596,
        "ip" : "192.168.0.235",
        "port" : null,
        "desc" : "纪检委节点",
        "expanded":true,
        "children":[{
            "id":"2",
            "leaf":true,
            "name" : "测试节点",
            "code" : 45239658,
            "ip" : "192.168.0.255",
            "port" : null,
            "desc" : "测试节点"
        }]
    }]
}

Controller:

Ext.define('node.controller.NodeController', {
    extend:'Ext.app.Controller',
    init:function(){
        this.control({

        });
    },
    views: [
        'NodeListPanel'
    ],
    stores: [
        //"NodeStore"
    ],
    models: [
        //"Node"
    ]
});

app.js :

Ext.onReady(function(){
    Ext.Loader.setConfig({
        enabled : true
    });

    Ext.application({
        name : "node",
        appFolder : ".",
        launch : function() {
            Ext.create("Ext.container.Viewport", {
                layout : "border",
                items : [{
                    xtype : "nodelistpanel"
                }]
            });
        },
        controllers : [
            'NodeController'
        ]
    });
});

在这里有两个很奇怪的地方:

1. NodeListPanel指定Store时,不能直接配置成store:"NodeStore"让其动态加载,而要直接创建出来,所以在Controller中不指定NodeStore也是可以的

2. NodeStore不能直接指定Model,而应该配置其fields属性代替,因为配置Model对TreeStore来说根本不起作用

以上两点至于为什么会这样,本人也没有去深究,望高人直接指点。

还有一个需要注意的地方就是一定要为TreePanel配置root属性,否则无法显示树形

时间: 2024-10-10 14:15:45

ExtJS中TreeGrid的用法的相关文章

extjs中apply和applyIf的用法

本文导读:extjs中apply及applyIf方法都是用于把一个对象中的属性复制到另外一个对象的属性中,相当于属性拷贝.不同的是apply将会覆盖目标对象中的属性,而applyIf只拷贝目标对象中没有,而源对象中有的属性. apply 方法的签名 apply( Object obj, Object config, Object defaults ) : Object 参数说明 第一个参数是要复制的目标对象:第二个参数是复制的源对象:第三个参数是默认源对象,第三个参数是可选的,意味着如果第三个参

extJS 中 ext.data 介绍

ext.data 最主要的功能是获取和组织数据结构,并和特定控件联系起来,于是,Ext.data成了数据的来源,负责显示数据. Ext.data在命名空间中定义了一系列store.reader和proxy.Grid和ComboxBox都是以Ext.data为媒介获取数据的,它包含异步加载.类型转换.分页等功能. Ext.data默认支持Array.JSON.XML等数据格式,可以通过Memory.HTTP.ScriptTag等方式获得这些格式的数据.如果要实现新的协议和新的数据结构,只需要扩展r

Oracle 中 decode 函数用法

Oracle 中 decode 函数用法 含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 THEN RETURN(翻译值2) ......ELSIF 条件=值n THEN RETURN(翻译值n)ELSE RETURN(缺省值)END IFdecode(字段或字段的运算,值1,值2,值3) 这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值

linux中快捷键的用法

linux中快捷键的用法 1.1 常见快捷键 ctrl + a 把光标移动到行首 ctrl + e 把光标移动到行尾 ctrl + c 撤销当前的操作=cancel ctrl + d logout命令(当前行没有任何内容,退出当前用户),删除光标所在位置后面的一个符号,文本 ctrl + l(小写字母L)清除屏幕内容 ctrl +u 剪切光标所在位置到行首内容 ctrl +k 剪切光标所在位置到行尾内容 ctrl +y 粘贴 ctrl + r search搜索历史命令,继续搜索,查找历史命令 

thinkphp中I("parm")用法的注意事项

php中用来传输的方式有两种$_GET 和 $_POST, thinkphp 提供了一种兼容两中传输方式的做法I(“param”) 但是请注意:在使用php中的函数时需要传入参数时不能用I(“parm”),必须使用采用的传输方式$_GET 或 $_POST传入,否则出错 thinkphp中I("parm")用法的注意事项,布布扣,bubuko.com

ASP.NET在实际开发中验证码的用法

在网上有看到很多关于验证码的代码,很多都只是生成一张验证码图片,然而在实际登陆验证模块,验证码要怎么添加进去或者说怎么运用.和实际项目开发中要怎么使用验证码,我自己总结了几点. 一.在实际开发登陆模块的验证码,程序员是将验证码的文本值(字符串)存在Session中的,然后在登陆验证的时候,通过Session取值进行判断的,这样效率会高很多. 二.然而在写验证码的时候要想通过Session存值,就必须实现System.Web.SessionState.IRequiresSessionState这个

objective-c 中随机数的用法 (3种:arc4random() 、random()、CCRANDOM_0_1() )

1.随机数的使用      1).arc4random() 比较精确不需要生成随即种子 使用方法 : 通过arc4random() 获取0到x-1之间的整数的代码如下: int value = arc4random() % x; 获取1到x之间的整数的代码如下: int value = (arc4random() % x) + 1; 2).CCRANDOM_0_1() cocos2d中使用 ,范围是[0,1] 使用方法: float random = CCRANDOM_0_1() * 5; //

[Perl系列—] 2. Perl 中的引用用法

Perl 中的引用,为什么要使用引用? 对于熟悉C语言的开发者来说, 指针这个概念一定不陌生. Perl 的引用就是指针,可以指向变量.数组.哈希表甚至子程序. Perl5中的两种Perl引用类型为硬Perl引用和符号Perl引用.符号Perl引用含有变量的名字,它对运行时创建变量名并定位很有用,基本上,符号Perl引用就象文件名或UNIX系统中的软链接.而硬Perl引用则象文件系统中的硬链接. Perl4只允许符号Perl引用,给使用造成一些困难.例如,只允许通过名字对包的符号名哈希表(名为_

String的replaceAll方法中的正则表达式用法

项目里面 需要对已手机号码进行 如下的显示 比如15088688388 要显示为150****8388的效果 实现这个简单的效果 方法有很多 我想试试用正则表达式去实现 查了点资料最终试出来以下方法可行 System.out.println("15088688388".replaceAll("(\\d{3})(\\d{4})","$1****")); 输出结果:150****8388 首先对replaceAll方法的第一个参数进行解释 第一个参数