開發動態編輯的表格
開發動態編輯的表格
Ext JS在Ext.grid.plugin包下提供了允許編輯表格的外掛功能,該包下提供瞭如下3個與表格編輯有關的類。
- Ø Ext.grid.plugin.Editing:為表格增加編輯功能的基類。
- Ø Ext.grid.plugin.RowEditing:為表格行增加編輯功能的外掛類。
- Ø Ext.grid.plugin.CellEditing:為單元格增加編輯功能的外掛類。
當使用Ext.grid.plugin.RowEditing、Ext.grid.plugin.CellEditing為表格增加編輯時,可以指定如下4種常見的事件處理函式。
- Ø beforeedit:在編輯之前觸發的事件處理函式。
- Ø canceledit:取消編輯時觸發的事件處理函式。
- Ø edit:編輯完成時觸發的事件處理函式。
- Ø validateedit:指定編輯完成之後,值被儲存到Store之前觸發該事件處理函式。如果該事件處理函式返回false,將可以取消編輯。
為該表格增加動態編輯功能,需要完成如下兩步:
使用Ext.grid.Panel定義表格時,可透過plugins選項為表格單擊單元格編輯外掛或行編輯外掛。
使用Ext.grid.Panel定義表格,並且使用fields選項定義表格列時,為需要編輯的單元格透過editor選項指定單元格編輯器。
如下示例開發了一個允許非同步、動態編輯表格資料的頁面。
程式清單:codes\06\6.8\Ext.grid\Ext.grid.Panel_edit.html
Ext.onReady(function(){
Ext.define('Book', {
extend: 'Ext.data.Model',
fields: [
{name: 'id' , type: 'int'},
{name: 'name', type: 'string'},
{name: 'author', type: 'string'},
{name: 'price', type: 'float'},
]
});
// 建立一個Ext.data.Store物件
var bookStore = Ext.create('Ext.data.Store',
{
// 指定使用Book Model管理記錄
model: 'Book',
// 使用proxy指定載入遠端資料
proxy:
{
type: 'ajax',
url: 'getAllBooks',// 向該URL傳送Ajax請求
reader: { // 使用Ext.data.reader.Json讀取伺服器資料
type: 'json',
root: 'data' // 直接讀取伺服器響應的data資料
},
},
autoLoad:true// 自動載入伺服器資料
});
var grid = Ext.create('Ext.grid.Panel', {
title: '檢視伺服器端圖書',
width: 550, // 指定表單寬度
renderTo: Ext.getBody(),
// 定義該表格包含的所有資料列
columns: [
{ text: '圖書ID', dataIndex: 'id' , flex: 1 }, // 第1個資料列
// 第2個資料列
{ text: '書名', dataIndex: 'name' , flex: 1,
editor: {xtype: 'textfield', allowPattern: false}},
// 第3個資料列
{ text: '作者', dataIndex: 'author', flex: 1,
editor: {xtype: 'textfield', allowPattern: false}},
// 第4個資料列
{ text: '價格', dataIndex: 'price' , flex: 1,
editor: {xtype: 'numberfield', allowPattern: false}},
],
selType: 'rowmodel', // 指定選擇模式:行選擇模式
plugins:
[
// 增加表格行編輯外掛
{
ptype: 'rowediting',
clicksToEdit: 1
}
],
store: bookStore
});
// 當表格編輯完成後,觸發該事件處理函式
grid.on('edit', function(editor, e)
{
Ext.Ajax.request({
url: 'updateBook', // 向此處傳送Ajax請求
method: 'POST',
params: { // 指定請求引數
id: e.newValues.id,
name: e.newValues.name,
author: e.newValues.author,
price: e.newValues.price,
}, // 指定伺服器響應完成的回撥函式
success: function(response){
alert(Ext.JSON.decode(response.responseText).tip);
e.record.commit();
}
});
});
});
上面的第一段粗體字程式碼透過fields選項配置了該表格的所有表格列,配置各表格列時透過editor選項指定了各單元格的編輯器;接下來第二段粗體字程式碼透過plugins選項為表格增加了表格行編輯的功能;第三段程式碼為表格的編輯事件增加了事件處理函式,但表格編輯完成後,將會透過Ajax請求動態地修改底層資料。
當前臺頁面的記錄修改完成後,該頁面會向updateBook傳送請求,該Servlet的程式碼如下。
程式清單:codes\06\6.8\Ext.grid\WEB-INF\src\org\crazyit\exts\web\UpdateBookServlet.java
@WebServlet(urlPatterns="/updateBook")
public class UpdateBookServlet extends HttpServlet
{
public void service(HttpServletRequest request ,
HttpServletResponse response)
throws IOException , ServletException
{
request.setCharacterEncoding("utf-8");
// 獲取請求引數
String id = request.getParameter("id");
String name = request.getParameter("name");
String author = request.getParameter("author");
String price = request.getParameter("price");
Map
boolean rvtVal = new BookService().updateBook(
Integer.parseInt(id) , name , author ,
Double.parseDouble(price));
result.put("tip" , rvtVal ? "修改成功!" : "修改失敗!");
// 準備輸出伺服器響應
response.setContentType("text/html;charset=utf-8");
PrintWriter ut = response.getWriter();
// 將Map包裝成JSONObject後輸出
out.print(new JSONObject(result));
}
}
上面的Servlet呼叫了業務邏輯元件BookService的updateBook()方法更新圖書,這樣即可動態地以Ajax方式修改底層資料。
在瀏覽器中瀏覽該頁面,並單擊任意行就會進入“行編輯”狀態,效果如圖6.79所示。
圖6.79 編輯行
本文節選自
《瘋狂Ajax講義(第3版)》
李剛 編著
電子工業出版社出版
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13164110/viewspace-754652/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 你不再需要動態網頁——編輯-釋出-開發分離網頁
- 動態規劃-編輯距離動態規劃
- (十一)可編輯表格EditorGridPanel
- 動態控制SAP CRM附件的可編輯性
- 動態建立表格
- JavaScript動態建立表格和增加表格的行JavaScript
- element封裝可編輯表格元件封裝元件
- (五) 文章編輯頁開發
- 電子表格控制元件SpreadJS開發案例:一鍵實現多人協同線上表格編輯控制元件JS
- ASP.NET動態網站開發培訓-26.線上編輯器FreeTextBox的使用ASP.NET網站
- 封裝Vue Element的可編輯table表格元件封裝Vue元件
- vue中elementUI的表格實現自定義編輯VueUI
- vue+iview 實現可編輯表格VueView
- 地圖編輯器開發中的心得地圖
- Leetcode 編輯距離(動態規劃)LeetCode動態規劃
- pycharm pro Python編輯開發PyCharmPython
- 兩種動態建立表格的方法
- mysql開發-動態語句編寫-引號使用MySql
- 微信小程式圖文編輯元件開發(偽富文字編輯)微信小程式元件
- JavaScript 動態建立table表格JavaScript
- JavaScript動態建立table表格JavaScript
- jquery 動態表格合併jQuery
- javascript 動態新增表格行JavaScript
- 截圖表格轉可編輯Word文字教程
- Excel表格新增編輯或刪除批註Excel
- FineUI v3.2.6釋出了!(表格內編輯)UI
- ElementUI表格行編輯單元格編輯支援(輸入框,選擇框)DemoUI
- SAP CRM WebClient UI表格編輯模式的除錯明細WebclientUI模式除錯
- Python編輯開發工具:pycharm proPythonPyCharm
- pycharm pro for mac(Python編輯開發)PyCharmMacPython
- layui動態新增刪除表格,並獲取表格中的值UI
- asp.net動態表格生成ASP.NET
- AngularJS教程九—— 動態表格AngularJS
- [譯] 為數字優先新聞編輯室開發文字編輯器
- 使用jQuery和Pure.CSS建立一個可編輯的表格jQueryCSS
- 快速開發,7個 Bootstrap 線上編輯器boot
- 轉:【Eclipse外掛開發】開啟編輯器Eclipse
- vue-split-table【表格合併和編輯外掛】Vue