【ExtJS實踐】之一 :TreeGrid異步加載數據


最近的項目里,實現用戶需要的效果,嘗試使用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向前端輸出動態加載的數據;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM