本篇開始模擬一個船舶管理系統,提供查詢、添加、修改船舶的功能,這里介紹其中的數據展示和查詢功能。
目錄
1. 數據展示
2. 數據查詢
3. 在線演示
1. 數據展示
在這里我們將模擬一個船舶管理系統,並提供查詢、添加、修改的功能。
大致的目錄結構如下:

ShipMgrTab.js :船舶業務的入口。
controller 目錄:存放船舶業務的邏輯控制文件。
model 目錄:存放船舶業務的model文件。
store 目錄 :存放船舶業務的store文件。
view 目錄 :存放船舶業務的組件文件。
1.1 設定Model
在展示數據之前要先做一些准備功能,比如業務與服務器數據交互的方式。
Model表示業務的實體對象,在這里設定船舶的Model:
Ext.define('App.ShipMgr.model.ShipModel', {
extend: 'Ext.data.Model',
fields: [
{ name: 'ShipId', type: 'string', remark: '船舶ID' },
{ name: 'ShipName', type: 'string', remark: '船舶名稱' },
{ name: 'State', type: 'string', remark: '狀態' },
{ name: 'StateName', type: 'string', remark: '狀態名稱' },
{ name: 'Tonnage', type: 'string', remark: '噸位' },
{ name: 'LoadNumber', type: 'int', remark: '核載人數' },
]
});
1.2 設定Store
Store封裝了一個Model對象的緩存,通過 Proxy 加載數據,並提供了對數據進行排序、篩選和查詢的功能。 (在這里只是簡單寫出需要的Model和Store;若需要對Mode、 Store和Proxy三者具體關系的了解可以訪問 http://docs.sencha.com/extjs/4.2.1/#!/guide/data)
var shipMgrStore = Ext.create('Ext.data.Store', {
model: 'App.ShipMgr.model.ShipModel',
pageSize: 25,
autoLoad: true,
proxy: {
type: 'ajax',
url: '/Business/ShipMgr/Query',
reader: {
reader: 'json',
root: 'data',
totalProperty: 'rowCount',
},
actionMethods: {
create: 'Post'
}
}
});
1.3 創建Grid組件
Grid組件常用語業務中數據的列表展示。
// 創建grid
var shipMgrGrid = Ext.create('Ext.grid.Panel', {
store: shipMgrStore,
columnLines: true,
rowLines: true,
bbar: Ext.create('Ext.toolbar.Paging', {
store: shipMgrStore,
pageSize: 25,
displayInfo: true,
displayMsg: '當前顯示第{0}行到第{1}行,一共{2}行。',
emptyMsg: '沒有任何記錄'
}),
columns: [
Ext.create('Ext.grid.RowNumberer', {
text: '序號',
width: 50
}), {
text: '船舶名稱',
dataIndex: 'ShipName',
flex:1
}, {
text: '狀態名稱',
dataIndex: 'StateName',
width: 150
}, {
text: '噸位',
dataIndex: 'Tonnage',
width: 150
}, {
text: '核載人數',
dataIndex: 'LoadNumber',
width: 150
}
]
});
1.4 服務器返回的數據格式
在這里shipMgrStore接收的是json格式的數據:
{"success":true,
"rowCount":100,
"data":[
{"ShipId":"989f1ace-5961-46d4-8f93-b56decb893af","ShipName":"船舶1","StateName":"離線","Tonnage":1.0,"LoadNumber":1},
{"ShipId":"f4dc1dd9-a173-4822-b3d3-4b3caa12820b","ShipName":"船舶2","StateName":"在線","Tonnage":1.0,"LoadNumber":1},
{"ShipId":"7b33d073-412b-460d-8e43-4f2d061d39a0","ShipName":"船舶3","StateName":"在線","Tonnage":2.0,"LoadNumber":2},
{"ShipId":"6ad72f6d-a4e6-4637-ab8b-038b9a7fc1b1","ShipName":"船舶4","StateName":"離線","Tonnage":3.0,"LoadNumber":3},
{"ShipId":"c3614867-a722-4ca8-961f-1324d5da4ad2","ShipName":"船舶5","StateName":"在線","Tonnage":1.0,"LoadNumber":4},
{"ShipId":"526befcf-0202-45b6-8175-4ca29a698acb","ShipName":"船舶6","StateName":"在線","Tonnage":5.0,"LoadNumber":1},
{"ShipId":"058295b4-e4d6-4fb6-b232-ed0e07515571","ShipName":"船舶7","StateName":"離線","Tonnage":6.0,"LoadNumber":6}
]}
1.5 運行圖

2. 數據查詢
查詢功能比較簡單,只需要shipMgrStore在每次請求時附加上查詢條件。
2.1 創建一個搜索框
首先在shipMgrGrid的上方工具欄處創建一個文本輸入框和一個查詢按鈕。
點擊查詢按鈕,會觸發shipMgrStore.loadPage(1)事件:
// 創建工具條
var shipMgrToolBarPanel = Ext.create('Ext.panel.Panel', {
width: '100%',
height: 40,
bodyBorder: false,
border: false,
region: 'north',
tbar: [
Ext.create('Ext.form.field.Text', {
name: 'SearchTxt',
emptyText: '請輸入船舶名稱',
width: 200,
enableKeyEvents: true,
listeners: {
keyup: function (thisControl, e, eOpts) {
if (e.button == 12) { // 若敲的鍵為回車,就執行【查詢】搜索
shipMgrToolBarPanel.down('[name=QueryBtn]').handler();
}
}
}
}),
Ext.create('Ext.Action', {
icon: 'Resources/icon/find.png',
text: '查詢',
name: 'QueryBtn',
handler: function () {
// 設置搜索條件
searchConditionObj.SearchTxt = shipMgrToolBarPanel.down('[name=SearchTxt]').value;
shipMgrStore.loadPage(1);
}
})
]
});
2.2. store附加搜索條件
shipMgrStore每次請求時都附加搜索條件:
// 創建store
var shipMgrStore = Ext.create('Ext.data.Store', {
model: 'App.ShipMgr.model.ShipModel',
pageSize: 25,
autoLoad: true,
proxy: {
type: 'ajax',
url: '/Business/ShipMgr/Query',
reader: {
reader: 'json',
root: 'data',
totalProperty: 'rowCount',
},
actionMethods: {
create: 'Post'
}
},
listeners: {
beforeload: function (thisStore, record, opts) {
// 附加檢索條件
thisStore.proxy.extraParams = searchConditionObj;
}
}
});
2.3 運行圖

3. 在線演示
在線演示:http://www.akmsg.com/ExtJS/index.html#App.ShipMgr.ShipMgrTab
