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

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

          作者:puras

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

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

          列表功能

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

          先定義數(shù)據(jù)源:

          this.ds = new Ext.data.Store({
                              proxy : new Ext.data.HttpProxy({ url : '/wit/data.shtml' }), //'/wit/data.shtml' 一個讀取數(shù)據(jù)列表的Action
                              reader : new Ext.data.JsonReader({ //使用JSON傳輸入數(shù)據(jù)
                                  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 } });

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

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

          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 : '創(chuàng)建日期',
                                  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();

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

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

          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
                          });

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

          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數(shù)據(jù)結構如下:

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

          未完待續(xù)......

          Feedback

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

          2007-12-14 11:12 by 網(wǎng)事
          可以給個聯(lián)系的方式嗎?
          QQ或者是MSN?

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

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

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

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

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

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

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

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

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

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

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

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

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

          Copyright © puras

          主站蜘蛛池模板: 大安市| 建昌县| 达州市| 修武县| 九寨沟县| 紫金县| 延川县| 徐汇区| 全州县| 泽州县| 贵溪市| 扎囊县| 贵德县| 黄大仙区| 柘荣县| 明溪县| 潜山县| 射阳县| 徐州市| 浮山县| 海兴县| 都兰县| 泸西县| 蒙阴县| 容城县| 镇远县| 沭阳县| 嘉鱼县| 汉沽区| 成安县| 集贤县| 珠海市| 嘉峪关市| 沈丘县| 湘潭市| 山东省| 利辛县| 兴山县| 确山县| 五台县| 任丘市|