作者:赫連紫軒(puras)

          前面已經把列表,分頁,刪除等部分說完了,這里再把創建和修改說說,基本的功能就差不多了.

          創建

          在這里,創建和修改者是用Dialog的形式來做的,首先則需要創建相應的DIV:

          <!-- add div -->
              <div id="a-addInstance-dlg" style="visibility:hidden;">
                  <div class="x-dlg-hd">添加權限</div>
                  <div class="x-dlg-bd">
                      <div id="a-addInstance-inner" class="x-layout-inactive-content">
                          <div id="a-addInstance-form"></div>
                      </div>
                  </div>       
              </div>

          之后就是在這個DIV里創建Form了,直接用Ext的Form組件:

          createNewForm : function() {       
                          this.name_tf = new Ext.form.TextField({
                              fieldLabel : '名稱',
                              name : 'name',
                              allowBlank : false
                          });
                          this.description_tf = new Ext.form.TextField({
                              fieldLabel : '描述',
                              name : 'description'
                          });
                          this.addForm = new Ext.form.Form({
                              labelAlign : 'right',
                              url : '/wit/add.shtml'
                          });
                          this.addForm.column({
                              width : 430,
                              labelWidth : 120,
                              style : 'margin-left : 8px; margin-top : 8px;'
                          });
                          this.addForm.fieldset(
                              {id : 'desc', legend : '請填寫字段值'},
                              Grid.name_tf,
                              Grid.description_tf
                          );
                          this.addForm.applyIfToFields({ width : 255 });
                          this.addForm.render('a-addInstance-form');
                          this.addForm.end();
                      }

          之后別忘了在加載的時候調用這個方法:

          this.createNewForm();

          Form窗體定義完,現在可以處理前面說的過那個創建按鈕的事件了,在這里事件處理的方法名為doAdd:

          doAdd : function() {
                          if (!Grid.addInstanceDlg) {
                              Grid.addInstanceDlg = Grid.createNewDialog('a-addInstance-dlg');
                              Grid.addInstanceDlg.addButton('重置', Grid.resetForm, Grid.addInstanceDlg);
                              Grid.addInstanceDlg.addButton('保存', Grid.saveNewForm, Grid.addInstanceDlg);
                              var layout = Grid.addInstanceDlg.getLayout();
                              layout.beginUpdate();
                              var t = new Ext.ContentPanel('a-addInstance-inner', {title : 'create account'});
                              layout.add('center', new Ext.ContentPanel('a-addInstance-inner', {title : '添加權限'}));
                              layout.endUpdate();           
                          }                   
                          Grid.addInstanceDlg.show();           
                      }

          首先用Grid.createNewDialog創建一個LayoutDialog,之后再把添加里的特有的按鈕加上去,然后更新一下Dialog的布局,把它顯示出來,這時就可以看到添加的窗體了:

          add

          呵,窗體做的很難看,因為只是為了實現功能,沒有在這方便下什么功夫.

          Grid.createNewDialog用于創建和修改時創建對話框,代碼如下:

          createNewDialog : function(title) {
                          var newDialog = new Ext.LayoutDialog(title, {
                              modal : true,
                              autoTabs : true,
                              proxyDrag : true,
                              resizable : false,
                              width : 480,
                              height : 302,
                              shadow : true,
                              center : {
                                  autoScroll : true,
                                  tabPosition : 'top',
                                  closeOnTab : true,
                                  closeOnTab : true,
                                  alwaysShowTabs : false
                              }
                          });
                          newDialog.addKeyListener(27, newDialog.hide, newDialog);
                          newDialog.addButton('取消', function() { newDialog.hide(); } );
                          return newDialog;           
                      }

          如果添加成功,則自動關閉這個Dialog,并重新加載列表,如果添加失敗,只是簡單的彈出一個對話框,提示失敗,其實這里可以做的更人性化一些,可以在服務器端傳回錯誤的原因,比如某字段有問題,可以紅色顯示出其輸入框等等.這里服務端返回的JSON數據與刪除返回的一樣.

          處理代碼如下:

          saveNewForm : function() {
                          if (Grid.addForm.isValid()) {
                              Grid.addForm.submit({
                                  waitMsg : '正在保存數據...',
                                  reset : true,
                                  failure : function(form, action) {
                                      Ext.MessageBox.alert('友情提示', action.result.info);
                                  },
                                  success : function(form, action) {
                                      Grid.addInstanceDlg.hide();
                                      Grid.ds.reload();
                                  }
                              });
                          } else {
                              Ext.MessageBox.alert('錯誤', '字段填寫不正確!');
                              Grid.name_tf.focus();
                          }
                      }

          修改

          修改則和創建差不多了,不同的有兩點,一是事件是在列表的行上雙擊,來觸發事件,彈出修改對話框,另一個則是需要在顯示對話框的同時,把所要修改的記錄的數據加載進來.

          首先在列表加上事件捕捉:

          this.grid.on('rowdblclick', this.onRowDbClick, this);   

          下面則是處理這個事件的代碼:

          onRowDbClick : function(grid, rowIndex, e) {
                          var selectId = this.ds.data.items[rowIndex].id;
                          var roleData = new Ext.data.Store({
                              proxy : new Ext.data.HttpProxy({url : '/wit/edit.shtml?id=' + selectId}),
                              reader : new Ext.data.JsonReader({}, ['id', 'name', 'description']),
                              remoteSort : false
                          });
                          roleData.on('load', function() {
                              Grid.updateId = roleData.getAt(0).data['id'];
                              Grid.name_show.setValue(roleData.getAt(0).data['name']);
                              Grid.description_show.setValue(roleData.getAt(0).data['description']);
                              if (!Grid.updateInstanceDlg) {
                                  Grid.updateInstanceDlg = Grid.createNewDialog('a-updateInstance-dlg');
                                  Grid.updateInstanceDlg.addButton('保存', Grid.saveUpdateForm, Grid.updateInstanceDlg);
                                  var layout = Grid.updateInstanceDlg.getLayout();
                                  layout.beginUpdate();
                                  layout.add('center', new Ext.ContentPanel('a-updateInstance-inner', {title : '修改權限'}));
                                  layout.endUpdate();
                              }
                              Grid.updateInstanceDlg.show();
                          });
                          roleData.load();
                      }

          這里做了兩件事,一個是把欲修改的數據加載到本地, 服務端返回的數據結構為:

          ([{"id":"12","description":"test role 12","name":"puras 12"}])

          一個是將數據置入Form窗體的字段中,并將Dialog顯示出來.修改的Form與創建的相似:

          createEditForm : function() {
                          this.name_show = new Ext.form.TextField({
                              fieldLabel : '名稱',
                              name : 'name',
                              allowBlank : false
                          });
                          this.description_show = new Ext.form.TextField({
                              fieldLabel : '名稱',
                              name : 'description'
                          });
                          this.editForm = new Ext.form.Form({
                              labelAlign : 'right',
                              url : '/wit/edit_ok.shtml'
                          });
                          this.editForm.column({width : 430, labelWidth : 120, style : 'margin-left : 8px; margin-top : 8px;'});
                          this.editForm.fieldset(
                              {legend : '請更新字段值'},
                              Grid.name_show,
                              Grid.description_show
                          );
                          this.editForm.applyIfToFields({width : 255});
                          this.editForm.render('a-updateInstance-form');
                          this.editForm.end();
                      }

          這個Form對應的Div為:

          <!-- update div -->
              <div id="a-updateInstance-dlg" style="visibility:hidden;">
                  <div class="x-dlg-hd">修改權限</div>
                  <div class="x-dlg-bd">
                      <div id="a-updateInstance-inner" class="x-layout-inactive-content">
                          <div id="a-updateInstance-form"></div>
                      </div>
                  </div>
              </div>

          雙擊某條記錄,則會彈出修改Dialog了,大概的樣子如下:

          edit

          修改的處理事件與添加類似,需要注意的地方就是ID是怎么傳過去的:

          saveUpdateForm : function() {
                          if (Grid.editForm.isValid()) {
                              Grid.editForm.submit({
                                  params : { id : Grid.updateId},
                                  waitMsg : '正在更新數據...',
                                  reset : false,
                                  failure : function(form, action) {
                                          Ext.MessageBox.alert('友情提示', action.result.info);
                                      },
                                  success : function(form, action) {
                                      Grid.updateInstanceDlg.hide();
                                      Grid.ds.reload();
                                  }
                              });                   
                          } else {
                              Ext.MessageBox.alert('錯誤', '字段填寫不正確!');
                          }
                      }

          到此就Over啦,列表,添,刪,改都OK了.在沒有做的時候,總是感覺找不到入口點,做完之后才發現,原來自己擔心的問題,都不是問題,哈,想想,還是挺簡單的.

          Feedback

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

          2007-09-11 16:16 by august
          老兄,能否參考一下你的源代碼?我正在研究這部分內容,很有參考價值,我的郵箱:zyf0808@yeah.net.謝謝

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

          2007-09-11 17:34 by 赫連紫軒(puras)
          @august
          實在不好意思啊
          因為只是臨時為了測試用的
          所以代碼寫的很亂
          等有時間我整理一下
          再發給各位朋友

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

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

          2007-09-21 11:13 by august
          關于分頁你能不能詳細解釋一下呢?post過去兩個參數,start和limit,我在后臺該怎么利用?如果利用這兩個參數取數據的話,那么只能顯示一頁,也即記錄集就只有pagesize那么多數據了。。。

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

          2007-09-24 08:58 by 赫連紫軒(puras)
          @august
          start:是記錄開始的位置
          limit:是記錄的條數
          有這些不足夠你用來分頁的嘛?
          難道你想一頁里把所有的記錄全返回來
          那多浪費啊

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

          2007-09-28 23:57 by 小貓
          我正在學EXT,可以發你的源代碼我參考下嗎?謝謝!
          EM:106283381@163.com

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

          2007-10-08 18:43 by Joseph
          請問一下this.createNewForm();是在那裡調用呢?
          麻煩幫忙我謝謝

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

          2007-10-08 18:49 by Joseph
          麻煩各位高手可以在LayoutDialog上要 Add Form這段上提供更詳細的作法嗎
          試很久一直出現錯誤訊息。謝謝幫忙

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

          2007-10-09 08:35 by 赫連紫軒(puras)
          @Joseph
          是在init方法里調用的
          為的是在用這個Form之前把其加載進去
          要是在每次調和的時候都調用
          就會重復加載了
          這樣做可以避免重復加載

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

          2007-10-09 08:40 by 赫連紫軒(puras)
          @Joseph
          LayoutDialog上Add Form
          有什么問題?
          描述一下

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

          2007-10-09 09:56 by Joseph
          dear puras
          可否麻煩你釋出整個原始碼呢?
          在文章中無提到createNewForm 等等一些程式碼
          這樣看著文章實際操作的話,會缺東缺西的無法正常執行

          我現的問題在 LayoutDialog上加 Form的TextField都會出現錯誤
          this.addForm.render('a-addInstance-form');
          以上無法正常 render至該 DIV

          還有 this.addForm.fieldset(
          {id : 'desc', legend : '請填寫字段值'},
          Grid.name_tf,
          Grid.description_tf
          );
          Grid.name_tf的 Grid 在文章中就沒提到定義在何處

          希望作者能釋出更完整的原始碼~~謝謝你抽空時間幫助我。

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

          2007-10-15 10:22 by xpy
          能給我發一份源代碼,謝謝,
          z278440337@126.com
          謝謝,學習學習

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

          2007-10-16 08:39 by 赫連紫軒(puras)
          @Joseph
          http://www.aygfsteel.com/puras/archive/2007/09/12/144478.html
          這里是前端頁面的代碼
          所有的JS都在這里了

          至于后端的
          只是一些數據的反回而已
          相信你看了前端的
          一定能把后端的處理好的.
          ^_^

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

          2007-11-08 09:05 by 影子
          后續部分我找到了,謝謝!

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

          2007-12-06 11:59 by keke
          現在用EXT2。0這個程序就運行不了,很多方法都改了,能不能改成2。0版本的啊。本人剛學,還不會改。

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

          2007-12-06 15:41 by puras
          @keke
          2.0暫時還沒有看
          不太了解都有什么地方改了
          不過我想大致的道理還是一樣的
          自己動手試試

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

          2008-08-05 11:08 by gotextile
          不錯,,,

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

          2008-08-18 14:19 by 開源否社區
          贊一個。

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

          Copyright © puras

          主站蜘蛛池模板: 湘潭县| 四会市| 乌拉特前旗| 随州市| 微博| 永清县| 安阳县| 牡丹江市| 马山县| 镇江市| 房山区| 卢龙县| 清丰县| 滦平县| 开平市| 阳城县| 秭归县| 华亭县| 兰西县| 恩平市| 镇巴县| 嘉定区| 肥城市| 东莞市| 安宁市| 五峰| 建瓯市| 辰溪县| 瑞丽市| 临夏市| 昌宁县| 彝良县| 盐津县| 宣恩县| 会同县| 余江县| 四子王旗| 礼泉县| 千阳县| 永川市| 祁门县|