<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    簡介:這篇文章將告訴你如何使用Ext中的Grid,Form,Dialog來實現列表,創建,更新,刪除,查找和分頁功能

    參考:http://extjs.com/learn/Tutorial:Using_Ext_grid_form_dialog_to_achieve_paging_list,_create,_edit,_delete_function

    作者:puras

    簽于現在網上多數的Form的例子都多數是描述前臺UI的,而沒有對與服務端通訊的部分,故參考EXTJS的一個指南,寫下此文,希望能對大家有所幫助.

    在WEB應用中,大部分的頁面都可以被分為:列表,創建,讀取,更新,刪除.在Ext的文檔中心提供了一個非常好的例子,一個行內編輯的表格.然而,在現實中,行內編輯的表格是遠遠不夠的,還需要用不同的方式來展示表單.下面的例子中向你展示如何在表格中創建/更新一個對話框表單.

    列表功能

    首先是是一個權限列表頁,它包含分頁,查詢/過濾功能,創建和刪除功能.

    先定義數據源:

    this.ds = new Ext.data.Store({
                        proxy : new Ext.data.HttpProxy({ url : '/wit/data.shtml' }), //'/wit/data.shtml' 一個讀取數據列表的Action
                        reader : new Ext.data.JsonReader({ //使用JSON傳輸入數據
                            root : 'roleList',
                            totalProperty : 'totalCount',
                            id : 'id'
                        },
                        // 定義字段映射
                        [
                            {
                                name : 'id',
                                mapping : 'id',
                                type : 'string'
                            },
                            {
                                name : 'name',
                                mapping : 'name',
                                type : 'string'
                            },
                            {
                                name : 'description',
                                mapping : 'description',
                                type : 'string'
                            },
                            {
                                name : 'createDate',
                                mapping : 'createDate',
                                type : 'string'
                            },
                            {
                                name : 'updateDate',
                                mapping : 'updateDate',
                                type : 'string'
                            }
                        ]),
                        remoteSort : true
                    });
                    this.ds.load({ params:{ start : 0, limit : 20 } });

    指定數據的來源位置,解析的方式,以及字段的映射.

    接下來是表格中表頭的定義,匹配上面的字段:

    this.cm = new Ext.grid.ColumnModel([
                        {
                            header : '#',
                            dataIndex : 'id',
                            width : 30,
                            sortable : 1
                        },
                        {
                            header : '名稱',
                            dataIndex : 'name',
                            width : 140,
                            sortable : 1
                        },
                        {
                            header : '描述',
                            dataIndex : 'description',
                            width : 140,
                            sortable : 1
                        },
                        {
                            header : '創建日期',
                            dataIndex : 'createDate',
                            width : 150,
                            sortable : 1
                        },
                        {
                            header : '修改日期',
                            dataIndex : 'updateDate',
                            width : 150,
                            sortable : 1
                        }
                    ]);

    再定義一下Grid:

    this.grid = new Ext.grid.Grid('htmlGridPanel', {
                        ds : Grid.ds,
                        cm : Grid.cm,
                        enableColLock : false,
                        autoSizeColumns : true,
                        loadMask : true
                    });
                    this.grid.render();

    現在,就可以看到簡單的表格了.功能還有待完善.

    接下來,在表格的頭部面板處,添加過濾/查詢的下拉菜單:

    this.gridHead = this.grid.getView().getHeaderPanel(true);
                    this.toolbar = new Ext.Toolbar(this.gridHead);
                    this.filterBtn = new Ext.Toolbar.MenuButton({
                        icon : '../images/class.gif',
                        cls : 'x-btn-text-icon',
                        text : '選擇過濾器',
                        tooltip : '選擇一個過濾器',
                        menu : { items : [
                            new Ext.menu.CheckItem({ text : '編號', value : 'id', checked : true, group : 'filter', checkHandler : this.onItemCheck}),
                            new Ext.menu.CheckItem({ text : '名稱', value : 'name', checked : false, group : 'filter', checkHandler : this.onItemCheck}),
                            new Ext.menu.CheckItem({ text : '描述', value : 'description', checked : false, group : 'filter', checkHandler : this.onItemCheck})
                        ]},
                        minWidth : 105
                    });               
                    this.toolbar.add(this.filterBtn);       
                    this.filter = Ext.get(this.toolbar.addDom({
                        tag : 'input',
                        type : 'text',
                        size : '30',
                        value : '',
                        style : 'background : #F0F0F9;'
                    }).el);
                    this.filter.on('keypress', function(e) {
                        if (e.getKey() == e.ENTER && this.getValue().length > 0) {
                            Grid.ds.load({ params : { start : 0, limit : 20 }});
                        }
                    });   

    在表格的底部面板添加分頁,添加,刪除按鈕:

    this.gridFoot = this.grid.getView().getFooterPanel(true);               
                    this.paging = new Ext.PagingToolbar(this.gridFoot, this.ds, {
                        pageSize : 20,
                        displayInfo : true,
                        displayMsg : '共有 {2} 條記錄.當前顯示 {0} - {1}條記錄.',
                        emptyMsg : '沒有記錄!'
                    });
                    this.paging.add('-', {
                        pressed : true,
                        enableToggle : true,
                        text : '添加',
                        cls : '',
                        toggleHandler : this.doAdd
                    });
                    this.paging.add('-', {
                        pressed : true,
                        enableToggle : true,
                        text : '刪除',
                        cls : '',
                        toggleHandler : this.doDel
                    });

    在分頁中,你需要在從服務器端加載數據之前發送過濾的字段和值:

    this.ds.on('beforeload', function() {
                        Grid.ds.baseParams = {
                            filterValue : Grid.filter.getValue(),
                            filterTxt : Grid.filterBtn.getText()
                        };
                    });
    從服務器端返回的列表的JSON結果如下:

    {"roleList":[{"id":21,"description":"description21","name":"puras21","createDate":"Fri Sep 07 15:54:44 CST 2007","updateDate":"Fri Sep 07 15:54:44 CST 2007"},{"id":40,"description":"description40","name":"puras40","createDate":"Fri Sep 07 15:54:44 CST 2007","updateDate":"Fri Sep 07 15:54:44 CST 2007"}],"totalCount":2}

    刪除

    刪除方法如下:

    doDel : function() {
                    var c = Grid.grid.getSelections();
                    if (c.length > 0)
                        Ext.MessageBox.confirm('消息', '確認要刪除所選記錄?', Grid.doDelProc);
                    else
                        Ext.MessageBox.alert('警告', '最少需要選擇一條記錄!');   
                },
                doDelProc : function(btn) {
                    if (btn == 'yes') {
                        if (Grid.grid.getSelectionModel().hasSelection()) {
                            var ids = new Array();
                            var records = Grid.grid.getSelectionModel().getSelections();
                            for (var i = 0, len = records.length; i < len; i++) {
                                ids[ids.length] = records[i].id;
                            }
                            Ext.lib.Ajax.request(
                                'GET',
                                '/wit/delete.shtml?ids=' + ids,
                                {
                                    success : Grid.onSuccess,
                                    failure : function(form, action) { Ext.MessageBox.alert('消息', '刪除失敗!');}
                                },
                                null
                            );
                        }
                    }
                },
                onSuccess : function(o) {
                    var response = function(json) {
                        try {
                            return eval('(' + json + ')');
                        } catch(e) {}
                        return null;
                    }(o.responseText);
                    if (response.failure && response.failure == true) {
                        Ext.MessageBox.alert('消息', response.info);
                    }
                    Grid.ds.reload();
                }

    通過Ajax的形式提交到服務器端.如果刪除失敗,則將失敗信息顯示給用戶.onSuccess可以用于添,刪,改三個功能的處理.返回的JSON數據結構如下:

    "{success : true, info : '刪除成功!'}"

    未完待續......

    Feedback

    # re: 使用Ext的Grid,Form,Dialog來實現分頁列表,創建,修改,刪除功能  回復  更多評論   

    2007-09-07 20:17 by Thomas
    不錯!

    # re: 使用Ext的Grid,Form,Dialog來實現分頁列表,創建,修改,刪除功能  回復  更多評論   

    2007-09-10 10:45 by 赫連紫軒
    @Thomas
    希望能夠喜歡~^_^

    # re: 使用Ext的Grid,Form,Dialog來實現分頁列表,創建,修改,刪除功能  回復  更多評論   

    2007-09-11 10:31 by li
    能給個源碼嗎?我用jsonReader讀取數據出不來.如果能給源碼請發送到followmephoe@yahoo.com.cn,謝謝!

    # re: 使用Ext的Grid,Form,Dialog來實現分頁列表,創建,修改,刪除功能  回復  更多評論   

    2007-09-11 16:00 by zhdq
    能給我發一份源代碼,謝謝,
    zhdq_j2ee@126.com
    謝謝,學習學習

    # re: 使用Ext的Grid,Form,Dialog來實現分頁列表,創建,修改,刪除功能  回復  更多評論   

    2007-09-11 17:35 by 赫連紫軒(puras)

    實在不好意思啊
    因為只是臨時為了測試用的
    所以代碼寫的很亂
    等有時間我整理一下
    再發給各位朋友
    我會盡快的

    有什么問題可以在這里共同探討一下^_^

    # re: 使用Ext的Grid,Form,Dialog來實現分頁列表,創建,修改,刪除功能  回復  更多評論   

    2007-10-20 10:25 by xshlife
    很不錯,我現在也剛開始入門ext ,請發一份你這個例子源碼給我,謝謝.
    xshlife@yahoo.com.cn

    # re: 使用Ext的Grid,Form,Dialog來實現分頁列表,創建,修改,刪除功能  回復  更多評論   

    2007-10-22 09:18 by 赫連紫軒(puras)
    @xshlife

    http://www.tkk7.com/puras/archive/2007/09/12/144478.html

    # re: 使用Ext的Grid,Form,Dialog來實現分頁列表,創建,修改,刪除功能[未登錄]  回復  更多評論   

    2007-11-08 09:03 by 影子
    謝謝你的文章,Ext我現在還沒完全入門,能否發一份原代碼和后續部分的URL給我,謝謝!
    Email:herhun@163.com
    MSN:herhun@hotmail.com
    QQ:4953295

    # re: 使用Ext的Grid,Form,Dialog來實現分頁列表,創建,修改,刪除功能  回復  更多評論   

    2007-11-13 16:17 by 楊雪松
    totalCount 要怎么取得呢?
    還是要再查詢一次數據庫?

    # re: 使用Ext的Grid,Form,Dialog來實現分頁列表,創建,修改,刪除功能  回復  更多評論   

    2007-11-14 09:44 by 赫連紫軒(puras)
    @楊雪松
    后臺如何處理
    自己隨意控制就可以了
    我做的是查了兩次數據庫
    一次是取總記錄數
    一次是取當前頁的記錄

    # re: 使用Ext的Grid,Form,Dialog來實現分頁列表,創建,修改,刪除功能  回復  更多評論   

    2007-12-14 11:12 by 網事
    可以給個聯系的方式嗎?
    QQ或者是MSN?

    # re: 使用Ext的Grid,Form,Dialog來實現分頁列表,創建,修改,刪除功能  回復  更多評論   

    2007-12-20 13:20 by puras
    @網事
    啊啊
    在公司所有的聊天工具都用不了......
    MSN最近上的也很少
    MSN和GTalk:puras.he@gmail.com
    不一定什么時候上線.呵.

    # re: 使用Ext的Grid,Form,Dialog來實現分頁列表,創建,修改,刪除功能  回復  更多評論   

    2008-04-01 11:38 by 暗暗
    請問 把表格和表單怎么才能結合一起 就像jsp那樣 表格里不一定顯示結果集 只是用來布局

    # re: 使用Ext的Grid,Form,Dialog來實現分頁列表,創建,修改,刪除功能  回復  更多評論   

    2009-02-22 14:59 by fanfan
    請問可以發給我一個這樣的工程嗎。。、、、、、我是初學者,遇到很多困難
    我的QQ:272646482
    郵箱:fanxing234@126.com

    # re: 使用Ext的Grid,Form,Dialog來實現分頁列表,創建,修改,刪除功能  回復  更多評論   

    2009-04-21 17:22 by 小濤
    你好,我也是剛學這個的,能發份源碼給我嗎?huangsd@newlandcomputer.com

    # re: 使用Ext的Grid,Form,Dialog來實現分頁列表,創建,修改,刪除功能  回復  更多評論   

    2010-01-13 15:52 by 老萬
    可以給我份嗎?

    # re: 使用Ext的Grid,Form,Dialog來實現分頁列表,創建,修改,刪除功能  回復  更多評論   

    2010-01-13 15:52 by 老萬
    我的郵箱是:liudan_net@163.com
    我也是初學者

    posts - 47, comments - 124, trackbacks - 0, articles - 0

    Copyright © puras

    主站蜘蛛池模板: 无码欧精品亚洲日韩一区| 又粗又大又硬又爽的免费视频| 97视频免费观看2区| 亚洲天堂免费在线视频| 亚洲精华国产精华精华液| 无人在线观看免费高清| 国产午夜亚洲精品理论片不卡| 午夜在线免费视频| 精品久久免费视频| 亚洲国产成人AV在线播放| 国产免费女女脚奴视频网| 亚洲福利视频网址| 午夜影院免费观看| 国产亚洲AV夜间福利香蕉149| 亚洲乱码在线观看| 在线观看免费人成视频| 亚洲视频一区在线播放| 麻豆视频免费播放| 亚洲成人在线免费观看| 国产精品免费观看| 亚洲依依成人精品| 在线免费观看中文字幕| 亚洲乱人伦中文字幕无码| 毛片免费全部免费观看| 亚洲一区免费视频| 国产一精品一AV一免费孕妇| 亚洲国产精华液2020| 四虎国产精品免费久久| 国产精品亚洲一区二区在线观看| 国产高清免费的视频| 特色特黄a毛片高清免费观看| 亚洲日本韩国在线| 日韩av无码免费播放| 亚洲国产综合专区电影在线| 可以免费观看的国产视频| 亚洲AV日韩AV永久无码绿巨人 | 免费国产污网站在线观看15| 久久精品国产亚洲av四虎| 8x8x华人永久免费视频| 亚洲国产精品无码久久98| 久久国产亚洲精品麻豆|