最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript的Ext JS框架中的GridPanel組件使用指南

 更新時間:2016年05月21日 14:55:47   作者:死神的喪鐘  
GridPanel和TreePnal功能類似,都是Ext JS中的表格便攜利器,相比之下GridPanel還要更強大并且更復(fù)雜一些,下面我們就來整理一下JavaScript的Ext JS框架中的GridPanel組件使用指南

1 最簡單的Grid Panel
Grid Panel是ExtJS的核心部分之一,通過Grid Panel可以對數(shù)據(jù)顯示、排序、分組和編輯。Model和Store是Grid Panel處理數(shù)據(jù)的核心,每個Grid Panel都必須設(shè)置Model和Store。要創(chuàng)建Grid Panel,首先要定義Model,Model包括了Grid Panel所有需要顯示的字段,相當(dāng)于數(shù)據(jù)庫中表字段的集合。Store可以看作是一行數(shù)據(jù)的集合或者是Model的實例集合,每個Store都包含一個或多個Model實例,Grid Panel顯示的數(shù)據(jù)都存儲在Store里面。Grid Panel通過Store獲取數(shù)據(jù)并顯示,Store則通過Proxy對數(shù)據(jù)進行讀取和保存。
下面創(chuàng)建一個Grid Panel用來顯示用戶的基本信息,包括用戶名、郵箱、手機號(name、email、phone),首先創(chuàng)建用戶模型(User Model)。

Ext.define('User', { 
 extend: 'Ext.data.Model', 
 fields: [ 'name', 'email', 'phone' ] 
}); 

接下來創(chuàng)建Store,Store是User的集合,包括多個User實例。

var userStore = Ext.create('Ext.data.Store', { 
 model: 'User', //剛才創(chuàng)建的User Model 
 data: [ 
 { name: 'Lisa', email: 'lisa@simpsons.com', phone: '555-111-1224' }, 
 { name: 'Bart', email: 'bart@simpsons.com', phone: '555-222-1234' }, 
 { name: 'Homer', email: 'home@simpsons.com', phone: '555-222-1244' }, 
 { name: 'Marge', email: 'marge@simpsons.com', phone: '555-222-1254' } 
 ] 
}); 

Model和Store都創(chuàng)建好之后,就可以創(chuàng)建Grid Panel了。

Ext.create('Ext.grid.Panel', { 
 renderTo: Ext.getBody(), 
 store: userStore, //綁定上面創(chuàng)建的Store 
 width: 400, 
 height: 200, 
 title: 'Application Users', 
 columns: [ 
 { 
 text: 'Name', 
 width: 100, 
 sortable: false, 
 hideable: false, 
 dataIndex: 'name' //Grid Panel中顯示的字段,必須要和User Model中的字段一致 
 }, 
 { 
 text: 'Email Address', 
 width: 150, 
 dataIndex: 'email', 
 hidden: true 
 }, 
 { 
 text: 'Phone Number', 
 flex: 1, 
 dataIndex: 'phone' 
 } 
 ] 
}); 

最后創(chuàng)建的用戶Grid Panel如圖所示。

2016521144614656.png (402×202)

2 Grid Panel數(shù)據(jù)分組(Grouping)
只要在Store中設(shè)置groupField屬性,就可以對Grid Panel顯示的數(shù)據(jù)進行分組。假設(shè)公司有很多員工,需要對公司的員工在Grid Panel中按部門進行分組顯示。首先在Store中設(shè)置groupField屬性為department。

Ext.create('Ext.data.Store', { 
 model: 'Employee', 
 data: ..., 
 groupField: 'department' //設(shè)置數(shù)據(jù)按照department分組 
}); 

然后在Grid Panel中添加grouping Feature,實現(xiàn)分組顯示效果。

Ext.create('Ext.grid.Panel', { 
 ... 
 features: [{ ftype: 'grouping' }] 
}); 

分組顯示效果如下圖所示,點擊這里查看官方分組顯示代碼。

2016521144711344.png (203×303)

3 Grid Panel分頁顯示
當(dāng)數(shù)據(jù)比較多一頁顯示不完的時候,就需要對數(shù)據(jù)進行分頁顯示。Grid Panel可以通過Paging Toolbar和Paging Scroller兩種方式實現(xiàn)分頁顯示顯示,Paging Toolbar有上一頁/下一頁按鈕,Paging Scroller是當(dāng)Grid Panel滾動顯示到底部的時候動態(tài)加載數(shù)據(jù)。
要實現(xiàn)分頁顯示,首先要設(shè)置Store支持分頁,在Store中設(shè)置pageSize,pageSize默認是25。在reader中設(shè)置數(shù)據(jù)總數(shù)量totalProperty,分頁插件根據(jù)pageSize和totalProperty進行分頁。下面的代碼pageSize設(shè)置為4,totalProperty則從返回的json數(shù)據(jù)中total屬性獲取。

Ext.create('Ext.data.Store', { 
 model: 'User', 
 autoLoad: true, 
 pageSize: 4, //設(shè)置每頁顯示的數(shù)據(jù)數(shù)量 
 proxy: { 
 type: 'ajax', 
 url : 'data/users.json', 
 reader: { 
 type: 'json', 
 root: 'users', //指定從json的哪個屬性獲取數(shù)據(jù),如果不指定,則從json的跟屬性獲取 
 totalProperty: 'total' //總數(shù)據(jù)數(shù)量 
 } 
 } 
}); 

假設(shè)json數(shù)據(jù)格式如下

{ 
 "success": true, 
 "total": 12, 
 "users": [ 
 { "name": "Lisa", "email": "lisa@simpsons.com", "phone": "555-111-1224" }, 
 { "name": "Bart", "email": "bart@simpsons.com", "phone": "555-222-1234" }, 
 { "name": "Homer", "email": "home@simpsons.com", "phone": "555-222-1244" }, 
 { "name": "Marge", "email": "marge@simpsons.com", "phone": "555-222-1254" } 
 ] 
} 

Store的分頁已經(jīng)設(shè)置完畢,下面在Grid Panel中實現(xiàn)Paging Toolbar分頁功能。

Ext.create('Ext.grid.Panel', { 
 store: userStore, 
 columns: ..., 
 dockedItems: [{ 
 xtype: 'pagingtoolbar', //在Grid Panel中添加paging toolbar 
 store: userStore, //把paging toolbar的Store設(shè)置成和Grid Panel的Store一樣 
 dock: 'bottom', 
 displayInfo: true 
 }] 
}); 

Paging Toolbar的分頁效果如下圖所示,點擊這里查看官方Paging Toolbar分頁功能代碼。

2016521144811777.png (405×206)

Paging Scroller的分頁實現(xiàn)比較簡單,只要在Grid Panel中設(shè)置如下代碼即可,點擊這里查看官方Paging Scroller分頁功能代碼。

Ext.create('Ext.grid.Panel', { 
 //使用Paging Scroller分頁插件 
 verticalScroller: 'paginggridscroller', 
 // do not reset the scrollbar when the view refreshs 
 invalidateScrollerOnRefresh: false, 
 // infinite scrolling does not support selection 
 disableSelection: true, 
 // ... 
}); 

4 Grid Panel添加Checkbox
只要設(shè)置Grid Panel的selModel屬性為Ext.selection.CheckboxModel,點擊這里查看官方代碼實例。

Ext.create('Ext.grid.Panel', { 
 selModel: Ext.create('Ext.selection.CheckboxModel'), //設(shè)置Grid Panel的選擇模式為Checkbox 
 store: userStore, 
 columns: ... 
}); 

5 綜合示例

var grid = new Ext.grid.GridPanel({ 
 store //數(shù)據(jù)源 
 cm //Ext.grid.columnModel 
 columns //功能和Ext.grid.columnModel一樣。與cm有一個就行 
 autoWidth:true 
 width 
 title 
 border:false 
 columnLines: true, 
 renderTo //顯示div標(biāo)簽的id 
 animCollapse:false //True 表示為面板閉合過程附有動畫效果 (默認為true,在類 Ext.Fx 可用的情況下). 
 collapsible: true, //true 表示面板可以閉合 
 columnLines:true, //true 表示有格邊框 
 loadMask:true //獲取數(shù)據(jù)里時有等待界面 
 stripeRows: true, //雙色表格 
 plugins:true, 
 bbar:new Ext.PagingToolbar({ 
 pageSize:10, 
 store:store, //數(shù)據(jù)源 
 displayInfo:true, //為true時下面的才顯示 
 displayMsg:'顯示第 {0} 條到 {1} 條記錄,一共 {2} 條', 
 emptyMsg:'沒有記錄' 
 }), 
 tbar:[{ 
 text:'查詢', 
 icon:'/trade/images/delete.gif', 
 cls:'x-btn-text-icon', 
 handler:function(){win.show();} 
 } 
}) 

//********************************************** 
//PagingToolbar分頁 
//傳到服務(wù)器數(shù)據(jù) start開始查詢位置, limit要查詢多少條 
//排序 
//服務(wù)器 sort,dir 
//********************************************** 
var com = new Ext.grid.ColumnModel([ 
 new Ext.grid.RowNumberer(), 
 {header: "客戶ID", width: 50, sortable: true, dataIndex: 'memid'}, 
 {header: "客戶姓名", width: 75, sortable: true, dataIndex: 'memName'}, 
 {header:'姓別', width:50, dataIndex:'sex', align:'center', sortable:true, renderer:function(v){return (v == '1')?'<img src="images/user_suit.png">':'<img src="images/user_female.png">';}} 
 {header: '跟蹤號',width:150,dataIndex:'code'}, 
 {header: '日期', width:150, dataIndex: 'kd_time'} 
]); 
 
/*********************************************** 
grid tbar 
樣式 
cls:'x-btn-text-icon' 添加 
**************************************************/ 
EditorGridPanel 
 chickToEdit:1 //點擊次數(shù) 
 ColumnModel 中要加editor editor:new Ext.form.TextField({ 
 }) 
//獲取修改后的數(shù)據(jù) 
var storeEdit = grid.getStore(); // 
 var modified = storeEdit.modified.slice(0); // 
 Ext.each(modified,function(m){ 
 alert(m.data.id);  //數(shù)據(jù)就在m.data中 id 為字段名 
}) 

//獲取grid數(shù)據(jù) 
var selModel = grid.getSelectionModel(); 獲取選擇模式 
var record; 
if(!selModel.hasSelection()){ 
 Ext.Msg.alert('警告','請選擇要修改的行!'); 
 return; 
} 
selModel.getSelections().length; //選擇的行數(shù) 
 
record = selModel.getSelected(); //獲取選擇行的數(shù)據(jù) 

(1)獲取數(shù)據(jù) :
單行 

id = record.get('id'); 

或者 

id = record.data.id; 

多行 

record[i].get('ddd') 

(2)刪除數(shù)據(jù) :

var obj = grid.getSelectionModel().getSelected(); 
store.remove(obj); 
grid.getView().refresh(); 

(3)查詢 

store.baseParams['memid'] = fb.form.findField('memid').getValue(); 
store.baseParams['start'] = 0; 
store.load(); 

(4)添加一行列 :
Ext自己帶的一個插件 
需要文件 RowExpander.js 

var expand = new Ext.ux.grid.RowExpander({ 
 tpl : new Ext.Template( 
 '<p>{address}</p>' 
 ) 
}); 

在grid的columns中加 expand, 
并在grid屬性中加 plugins: expand 

相關(guān)文章

最新評論

呈贡县| 视频| 民和| 奉新县| 砚山县| 永昌县| 墨江| 叙永县| 西青区| 城步| 石台县| 岳阳市| 吉林市| 南华县| 溧阳市| 苍山县| 钟祥市| 高清| 徐州市| 汝城县| 平原县| 黔东| 伊通| 台东市| 南宁市| 尖扎县| 惠安县| 营山县| 兰坪| 白河县| 砀山县| 长宁县| 大埔县| 察雅县| 禄劝| 扶风县| 揭西县| 西乡县| 秦皇岛市| 桃江县| 嘉鱼县|