ExtJs4學習(七)MVC中的Store,extjs4mvc
Ext.data.Store是extjs中用來進行資料交換和資料互動的標準中介軟體,無論是Grid還是ComboBox,都是通過它 實現資料讀取、類型轉換、排序分頁和搜尋等操作的。
Ext.define('User', { extend: 'Ext.data.Model', fields: [ {name: 'loginname', type: 'string'}, {name: 'ip', type: 'string'} ]});
Store既可以從本地數組中讀取資料,也可以從伺服器遠程讀取資料,當然還可以伺服器代理讀取,這些都得靠proxy實現,至於還有哪些區分,以及實現方式將再下一節闡述
為了更好的說清楚Store的用法,我們做如下例子
var store = Ext.create('Ext.data.Store', { model: 'User', proxy: { type: 'memory', data:[{loginname:'admin',ip:'192.168.1.2'},{loginname:'guest',ip:'192.168.1.5'}] }, //autoLoad:true//配置了此項,表明資料集自動載入});
一些常用方法
//載入資料store.load();//添加資料store.add({loginname:'administrator.com',ip:'192.168.1.8'});//讀取資料store.each(function(record){console.info(record.get('loginname'));alert(record.get('loginname'));});//過濾//store.filter("loginname", /\.com$/);根據單個屬性域(field)過濾:store.filter([ {property: "loginname", value: /\.com$/}, {filterFn: function(item) { return item.get("ip") == '192.168.1.5'; }}]);//尋找某條記錄var record = store.find('loginname','guest');//擷取store中第一條記錄的快捷方法.var record = store.first();//擷取指定index處的記錄var record = store.getAt(2);//擷取store中記錄的數量var count = store.getCount;//擷取store中最後一條記錄的快捷方法var record = store.last();
後台讀取資料
var store = Ext.create('Ext.data.Store', { model: 'User', pageSize:5,//每頁顯示條數,預設25 proxy: { type: 'ajax', url: 'jsonServer.jsp', reader: { type: 'json', root: 'rows', totalProperty: 'total' }, writer: {type: 'json'} }});
怎麼擷取資料
store.load({scope: this, callback: function(records, operation, success) { //擷取總記錄數 //console.info(store.getCount());這個來源於對記錄的統計 console.info(store.getTotalCount());//這個來源於後台傳過來的total //擷取當前頁 console.info(store.currentPage); Ext.each(records,function(record){ console.info(record.get('loginname')); }) }});//顯示第二頁資料store.loadPage(2);//顯示上一頁資料store.previousPage();//顯示下一頁資料store.nextPage();
後台資料,我以jsp的形式提供
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><%String[] persons = new String[10];persons[0] = "{loginname : 'tom' , ip : '192.168.1.1'}";persons[1] = "{loginname : 'jack' , ip : '192.168.1.2'}";persons[2] = "{loginname : 'mary' , ip : '192.168.1.3'}";persons[3] = "{loginname : 'jone' , ip : '192.168.1.4'}";persons[4] = "{loginname : 'ada' , ip : '192.168.1.5'}";persons[5] = "{loginname : 'alex' , ip : '192.168.1.6'}";persons[6] = "{loginname : 'lucy' , ip : '192.168.1.7'}";persons[7] = "{loginname : 'jms' , ip : '192.168.1.8'}";persons[8] = "{loginname : 'smile' , ip : '192.168.1.9'}";persons[9] = "{loginname : 'somnus' , ip : '192.168.1.10'}";int pageSize = Integer.parseInt(request.getParameter("page").toString());int limit = Integer.parseInt(request.getParameter("limit").toString());System.out.println("pageSize="+pageSize+ " limit="+limit);StringBuffer personName = new StringBuffer();personName.append("{");personName.append("total : 10,");personName.append("rows : [");int min = (pageSize-1)*limit;int max = pageSize*limit;if(max > 10){max = 10;}for(int i = min ; i < max ; i++){personName.append(persons[i]);if(i < max - 1){personName.append(",");}};personName.append("]");personName.append("}");response.getWriter().write(personName.toString());%>