6.Json數據
至於這種數據的類型請大家自己看Ajax的書籍:
- //JsonData
- var data = {
- 'coders': [
- { 'id': '1', 'sex': 'male', 'name':'McLaughlin', 'descn': '[email protected]' },
- { 'id': '2', 'sex': 'male','name':'Hunter', 'descn': '[email protected]' },
- { 'id': '3', 'sex': 'female','name':'Harold', 'descn': '[email protected]' },
- { 'id': '4', 'sex': 'male','name':'Harolds', 'descn': '[email protected]' }
- ],
- 'musicians': [
- { 'id': '1', 'name': 'Clapton', 'descn': 'guitar' },
- { 'id': '2', 'name': 'Rachmaninoff', 'descn': 'piano' }
- ]
- }
- //ds使用的MemoryProxy對象和JsonReader對象
- var ds = new Ext.data.Store({
- proxy: new Ext.data.MemoryProxy(data),
- reader: new Ext.data.JsonReader({root: 'coders'}, [
- {name: 'id'},
- {name: 'sex'},
- {name: 'name'},
- {name: 'descn'}
- ])
- });
- ds.load();
- var grid = new Ext.grid.GridPanel({
- el: 'grid3',
- ds: ds,
- cm: cm,
- sm: sm,
- title: 'HelloWorld',
- autoHeight: true//一定要寫,否則顯示的數據會少一行
- });
- grid.render();
7.使用XML數據:
注意,讀取XML數據必須在服務器上進行。
XML數據test.xml的內容:
- <?xml version="1.0" encoding="UTF-8"?>
- <dataset>
- <results>2</results>
- <item>
- <id>1</id>
- <sex>male</sex>
- <name>Taylor</name>
- <descn>Coder</descn>
- </item>
- </dataset>var ds3 = new Ext.data.Store({
- url: 'test.xml', //XML數據
- reader: new Ext.data.XmlReader({record: 'item'}, [ //使用XmlReader對象
- {name: 'id'},
- {name: 'sex'},
- {name: 'name'},
- {name: 'descn'}
- ])
- });
8.從服務器獲取數據和數據翻頁控件
從一個服務器文件,如ASP、JSP或Servlet中獲得數據二維Array、JSON或XML數據,也可以被Ext讀取,並被Grid顯示:
服務器文件data.asp:
- <%
- start = cint(request("start"))
- limit = cint(request("limit"))
- dim json
- json=cstr("{totalProperty:100,root:[")
- for i = start to limit + start-1
- json =json + cstr("{'id':'") +cstr(i) + cstr("','name':'name") + cstr(i) + cstr("','descn':'descn") + cstr(i) + cstr("'}")
- if i <> limit + start - 1 then
- json =json + ","
- end if
- next
- json = json +"]}"
- response.write(json)
- %>
我們可以看到,這個頁面會根據傳入的start和limit的不同,返回不同的數據,其實質是個分頁的代碼。下面是start=0,limit=10的JSON數據:
- {totalProperty:100,root:[{'id':'0','name':'name0','descn':'descn0'},{'id':'1','name':'name1','descn':'descn1'},{'id':'2','name':'name2','descn':'descn2'},{'id':'3','name':'name3','descn':'descn3'},{'id':'4','name':'name4','descn':'descn4'},{'id':'5','name':'name5','descn':'descn5'},{'id':'6','name':'name6','descn':'descn6'},{'id':'7','name':'name7','descn':'descn7'},{'id':'8','name':'name8','descn':'descn8'},{'id':'9','name':'name9','descn':'descn9'}]}
我們使用分頁控件來控制Grid的數據:
- Ext.onReady(function(){
- var sm = new Ext.grid.CheckboxSelectionModel();
- var cm = new Ext.grid.ColumnModel([
- new Ext.grid.RowNumberer(),
- sm,
- {header:'編號',dataIndex:'id'},
- {header:'性別',dataIndex:'sex'},
- {header:'名稱',dataIndex:'name'},
- {header:'描述',dataIndex:'descn'}
- ]);
- cm.defaultSortable = true;
- var ds = new Ext.data.Store({
- proxy: new Ext.data.HttpProxy({url:'data.asp'}),
- reader: new Ext.data.JsonReader({
- totalProperty: 'totalProperty',
- root: 'root'
- }, [
- {name: 'id'},
- {name: 'name'},
- {name: 'descn'}
- ])
- });
- ds.load({params:{start:0,limit:10}});
- var grid = new Ext.grid.GridPanel({
- el: 'grid3',
- ds: ds,
- cm: cm,
- sm: sm,
- title: 'ASP->JSON',
- bbar: new Ext.PagingToolbar({
- pageSize: 10,
- store: ds,
- displayInfo: true,
- displayMsg: '顯示第 {0} 條到 {1} 條記錄,一共 {2} 條',
- emptyMsg: "沒有記錄"
- }),
- tbar: new Ext.PagingToolbar({
- pageSize: 10,
- store: ds,
- displayInfo: true,
- displayMsg: '顯示第 {0} 條到 {1} 條記錄,一共 {2} 條',
- emptyMsg: "沒有記錄"
- })
- });
- grid.render();
- })
10.如何在Grid的上方添加按鈕呢?
添加按鈕的關鍵之處在於tbar或bbar屬性設置Toolbar工具條:
- var grid = new Ext.grid.GridPanel({
- el: 'grid3',
- ds: ds,
- cm: cm,
- sm: sm,
- title: 'HelloWorld',
- tbar: new Ext.Toolbar({
- items:[
- {
- id:'buttonA'
- ,text:"Button A"
- ,handler: function(){ alert("You clicked Button A"); }
- }
- ,
- new Ext.Toolbar.SplitButton({})
- ,{
- id:'buttonB'
- ,text:"Button B"
- ,handler: function(){ alert("You clicked Button B"); }
- }
- ,
- '-'
- ,{
- id:'buttonc'
- ,text:"Button c"
- }
- ]
- })
- });
11.將GridPanel放入一個Panel或TabPanel中
- var tabs = new Ext.TabPanel({
- collapsible: true
- ,renderTo: 'product-exceptions'
- ,width: 450
- ,height:400
- ,activeTab: 0
- ,items:[
- {
- title: 'Unmatched'
- },{
- title: 'Matched'
- }
- ]
- });
- tabs.doLayout();
- var panel = new Ext.Panel({
- renderTo: 'panel',
- title:'panel',
- collapsible:true,
- width:450,
- height:400,
- items:[grid] //管理grid
- });
Panel必須有DIV存在。其包含的Component有items管理。