本篇開始模擬一個船舶管理系統,提供查詢、添加、修改船舶的功能,這裏介紹其中的數據展現和查詢功能。javascript
1. 數據展現html
2. 數據查詢java
3. 在線演示web
在這裏咱們將模擬一個船舶管理系統,並提供查詢、添加、修改的功能。ajax
大體的目錄結構以下:json
ShipMgrTab.js :船舶業務的入口。api
controller 目錄:存放船舶業務的邏輯控制文件。緩存
model 目錄:存放船舶業務的model文件。服務器
store 目錄 :存放船舶業務的store文件。app
view 目錄 :存放船舶業務的組件文件。
在展現數據以前要先作一些準備功能,好比業務與服務器數據交互的方式。
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: '核載人數' }, ] });
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' } } });
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 } ] });
在這裏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} ]}
查詢功能比較簡單,只須要shipMgrStore在每次請求時附加上查詢條件。
首先在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); } }) ] });
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; } } });
在線演示:http://www.akmsg.com/ExtJS/index.html#App.ShipMgr.ShipMgrTab