惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
Stack Overflow Blog
Stack Overflow Blog
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
T
The Blog of Author Tim Ferriss
博客园 - 叶小钗
N
Netflix TechBlog - Medium
腾讯CDC
C
Check Point Blog
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI
S
SegmentFault 最新的问题
F
Fortinet All Blogs
美团技术团队
U
Unit 42
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 司徒正美
F
Full Disclosure
Recorded Future
Recorded Future
D
DataBreaches.Net
博客园 - 【当耐特】
Martin Fowler
Martin Fowler
J
Java Code Geeks
I
InfoQ
Y
Y Combinator Blog
A
About on SuperTechFans
AI
AI
爱范儿
爱范儿
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Forbes - Security
Forbes - Security
W
WeLiveSecurity
M
MIT News - Artificial intelligence
雷峰网
雷峰网
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
Schneier on Security
Schneier on Security
The GitHub Blog
The GitHub Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
aimingoo的专栏
aimingoo的专栏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
G
GRAHAM CLULEY
Know Your Adversary
Know Your Adversary
Latest news
Latest news
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
D
Docker
Recent Commits to openclaw:main
Recent Commits to openclaw:main
量子位
V2EX - 技术
V2EX - 技术
Project Zero
Project Zero

博客园 - EricZhen

【ExtJS实践】之七 :禁止Grid、Treegrid列排序和列菜单 【ExtJS实践】之六 :Combobox从后台获取JSON格式的数据 【ExtJS实践】之五 :常用语句及脚本备忘 【ExtJS实践】之四 :关于ExtJS的createDelegate 【ExtJS实践】之三 :页面布局应用 【ExtJS实践】之二 :TreeGrid显示复选框 ASP.Net下使用ExtJS报“Ext未定义”错误的原因 关于在Windows2008里配置AjaxPro.2 【备忘】转:.net的数据库连接字符串 【备忘】转:模态窗口缓存问题的解决 【备忘】红旗Linux下安装VMWare Tools的方法 关于Cookie的一个小问题 [备忘]各类数据库连接字符串 [备忘]autorun专杀工具 [备忘].cll文件的MIME类型 [备忘]方正字库中英文对照表 [SharePoint2007]使用自定义数据库的几个问题 [SharePoint]不同页面间的多个数据视图间建立关联 C#在Word文档指定位置处理表格
【ExtJS实践】之一 :TreeGrid异步加载数据
EricZhen · 2012-06-11 · via 博客园 - EricZhen

最近的项目里,实现用户需要的效果,尝试使用ExtJS3.4。

为了总结开发过程中遇到的问题,因此给自己规定了一个记录的计划,把开发过程中解决的技术点及遇到的问题记录下来,以备今后查询。

第一个例子,TreeGrid异步加载数据;

TreeGrid是Ext在发布3.0版本后新增的控件,扩展Ext.ux.tree.TreePanel的功能,因此它本质上还是一棵树。

一、参考资料

1、官网实例及帮助文档

2、因为之前从没有深入研究过Ext,因此在制作这个例子的过程中,参考了网上的一个朋友写的例子,连接如下:

http://yuanlg.iteye.com/blog/920871

在他得例子的基础上完成了我自己的实例。

二、实例完整代码

<html>
<head>
    <title>树形列表</title>
    <!-- ext css includes -->
    <link href="../ExtJS/resources/css/ext-all.css" rel="stylesheet" type="text/css" />
    <link rel="stylesheet" type="text/css" href="../extjs/examples/ux/treegrid/treegrid.css"/>
    
    <!-- ext javascript includes -->
    <script src="../ExtJS/adapter/ext/ext-base-debug.js" type="text/javascript"></script>
    <script src="../ExtJS/ext-all-debug.js" type="text/javascript"></script>
    
    
    <script type="text/javascript" src="../extjs/examples/ux/treegrid/TreeGridSorter.js"></script>
    <script type="text/javascript" src="../extjs/examples/ux/treegrid/TreeGridColumnResizer.js"></script>
    <script type="text/javascript" src="../extjs/examples/ux/treegrid/TreeGridNodeUI.js"></script>
    <script type="text/javascript" src="../extjs/examples/ux/treegrid/TreeGridLoader.js"></script>
    <script type="text/javascript" src="../extjs/examples/ux/treegrid/TreeGridColumns.js"></script>
    <script type="text/javascript" src="../extjs/examples/ux/treegrid/TreeGrid.js"></script>
    
    <script type="text/javascript">
    <!--
    Ext.BLANK_IMAGE_URL = "/pmscost/baselib/extjs/resources/images/default/s.gif";
    
    Ext.onReady(function() {
        Ext.QuickTips.init();

        var tree = new Ext.ux.tree.TreeGrid({
            title: 'Core Team Projects',
            width: 500,
            height: 300,
        
        //定义树的加载器 
        var treeloader = new Ext.ux.tree.TreeGridLoader({ 
            dataUrl : "../Cost_JsonDb.ashx?tablename=boq_model&parentSysId=0" 
        }); 
        
        //定义treegrid 
        var treeGrid = new Ext.ux.tree.TreeGrid({ 
            title : '建筑工程.表三',                //表头名称,去掉则不显示表头
            id : "tg_boqm_c",                       //树形列表id
            width: 1000,
            height: 600,
            //renderTo: Ext.getBody(),
            //autoScroll : true, 
            //autoHeight : true, 
            //border : false, 
            animate : true, 
            enableDD : true, 
            rootVisible : false, 
            containerScroll : true, 
            enableSort:false,           //默认为true,控件根据列的内容排序;置为false,则按照数据顺序显示
            columns : [ { 
                header : '序号', 
                dataIndex : 'boqm_sequence', 
                width : 150 
            },{ 
                header : '定额编号', 
                dataIndex : 'bqs_code', 
                width : 100,
                align : 'center'
            },{ 
                header : '项目名称及规范', 
                dataIndex : 'boqm_boq_name', 
                width : 300,
                align : 'center'
            },{ 
                header : '单位', 
                dataIndex : 'boqm_unit',
                width : 80 /*, 
                renderer : function(n) { 
                if (n == '1') { 
                return "省、自治区"; 
                } else if (n == '2') { 
                return "市、州"; 
                } else if (n == '3') { 
                return "县"; 
                } else if (n == '4') { 
                return "乡镇"; 
                } else if (n == '5') { 
                return "村"; 
                } 
                } */
            },{ 
                header : '系统编号', 
                dataIndex : 'sysid',
                hidden : true 
            },{ 
                header : '填写方式', 
                dataIndex : 'boqm_filltype',
                hidden : true 
            },{ 
                header : '父级编号', 
                dataIndex : 'parent_sysid',
                hidden : true 
            }], 
            //dataUrl : 'treegrid-data.json',
            loader : treeloader 
            //绑定加载器 
        }); 
        
        // 异步加载根节点 
        var rootnode = new Ext.tree.AsyncTreeNode({ 
            id : '0', 
            text : '中华人民共和国行政区划代码', 
            draggable : false,// 根节点不容许拖动 
            expanded : true
        }); 
        //设置节点属性 
        rootnode.attributes = { 
            sysid : '0',
            boqm_sequence : '0',
            bqs_code : '0',
            boqm_boq_name : '0',
            boqm_unit : '0',
            boqm_filltype : 'sum',
            parent_sysid : '-1'
        }; 
        
        // 为tree设置根节点 
        treeGrid.setRootNode(rootnode); 

        // 响应加载前事件,传递node参数 
        treeGrid.on(
            'beforeload',
            function(node) { 
                var sysid = node.attributes["sysid"];
                //alert(sysid);
                treeGrid.loader.dataUrl = "../Cost_JsonDb.ashx?tablename=cost_boq_model&parentSysId=" + sysid; // 定义子节点的Loader 
            },
            treeloader
        );
        
        treeGrid.render(Ext.getBody());
        
        treeGrid.expand(false,false);

    });
    //-->
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div id="tree">
    
    </div>
    </form>
</body>
</html>

三、注意事项

1、Ext框架中所有的图片均先放置一个空白的s.gif文件,然后再用需要显示的图片替换s.gif。默认状态下,Ext控件会到官网下载s.gif。

    如果你的程序是在内网发布,不发访问外网的话,可以使用Ext自带的s.gif替换,具体方法如下:

Ext.BLANK_IMAGE_URL = extjs/resources/images/default/s.gif";

2、我是在ASP.Net下使用的Ext,vs.net在新增一个aspx文件时,会自动增加DOCTYPE。如果使用ext控件,一定要把这个东西去掉。

3、实例化TreeGrid时,不要指定rendeTo属性,而是要在最后通过TreeGrid.render(object)的方式渲染控件。否则,成宿会报“this.ui为空或不是对象”错误。

4、根节点可以在TreeGrid的Config参数中指定,也可以通过setRootNode方法指定。不论使用哪种方法,都需要指定一个TreeNode对象。

    官网帮助文档中给出的演示代码中,在Config中指定root属性的值,是一组json值,程序会报错。

5、使用.net的事务处理文件ashx向前端输出动态加载的数据;