Ext.data.Store
store是一個為Ext器件提供record對象的存儲容器,行為和屬性都很象資料表
方法:不列舉繼承來的方法
Store( Object config )
構造,config定義為{
autoLoad : Boolean/Object, //自動載入
baseParams : Object, //隻有使用httpproxy時才有意義
data : Array, //資料
proxy : Ext.data.DataProxy,//資料代理
pruneModifiedRecords : boolean,//清除修改資訊
reader : Ext.data.Reader, //資料讀取器
remoteSort : boolean, //遠端排序?
sortInfo : Object, //{field: "fieldName", direction: "ASC|DESC"}這樣的排序對象
url : String, //利用url構造HttpProxy
}
add( Ext.data.Record[] records ) : void
增加記錄records 到store
addSorted( Ext.data.Record record ) : void
增加record到store并排序(僅本地排序時有用)
clearFilter( Boolean suppressEvent ) : void
清除過濾器
collect( String dataIndex, [Boolean allowNull], [Boolean bypassFilter] ) : Array
收集由dataIndex指定字段的惟一值
commitChanges() : void
送出Store所有的變更,會引發Update事件
filter( String field, String/RegExp value, [Boolean anyMatch], [Boolean caseSensitive] ) : void
設定過濾器
field:String //字段名
value:String //RegExp 如果是字元器,檢查field是否以value開始,如果是正則,檢查是否比對
anyMatch:Boolean //比對任何部分而不僅令是開始
caseSensitive:Boolean //大小寫敏感?
filterBy( Function fn, [Object scope] ) : void
更強悍的過濾方法.fn接收兩個參數record和id
find( String property, String/RegExp value, [Number startIndex], [Boolean anyMatch], [Boolean caseSensitive] ) : Number
找到符合條件的第一條記錄,參數同filter
findBy( Function fn, [Object scope], [Number startIndex] ) : Number
參見filterBy
getAt( Number index ) : Ext.data.Record
getById( String id ) : Ext.data.Record
依充号/id得到record對象
getCount() : void
得到記錄數
getModifiedRecords() : Ext.data.Record[]
得到修改過的記錄集
getRange( [Number startIndex], [Number endIndex] ) : Ext.data.Record[]
得到指定範圍的記錄集合
getSortState() : void
得到排序狀态:顯然不是void而是傳回一個排序對象,同sortInfo一樣的結構{field: "fieldName", direction: "ASC|DESC"}
getTotalCount() : void
這個對于翻頁資訊還是很有用的
indexOf( Ext.data.Record record ) : Number
indexOfId( String id ) : Number
由記錄或id得到序号
insert( Number index, Ext.data.Record[] records ) : void
在指定的位置插入記錄,并引發add事件
isFiltered() : Boolean
目前設定了過濾器則傳回真
load( Object options ) : void
由指定的Proxy使用指定的reader讀取遠端資料
options定義為
{
params :Object, //請求url需要附加的參數
callback :Function//回叫方法,接收三個參數
//r : Ext.data.Record[] //傳回的record數組
//options: Options load方法傳入的options
//success: Boolean //成功
scope :Object, //範圍.預設是store本身
add :Boolean 追加還是更新
loadData( Object data, [Boolean append] ) : void
用法比load簡單一點,目的是一樣的,隻是這次資料由本地讀取
query( String field, String/RegExp value, [Boolean anyMatch], [Boolean caseSensitive] ) : MixedCollection
queryBy( Function fn, [Object scope] ) : MixedCollection
查詢,參數和find類似,但傳回所有符合條件的record,而不是第一個符合條件記錄的序号
rejectChanges() : void
放棄所有的變更
reload( [Object options] ) : void
重新載入,相當于 load(options,false),如果連options都沒有傳入,則取最後一次load時使用的參數
remove( Ext.data.Record record ) : void
移除指定記錄
removeAll() : void
移除所有記錄
setDefaultSort( String fieldName, [String dir] ) : void
設定預設排序規則
sort( String fieldName, [String dir] ) : void
排序
sum( String property, Number start, Number end ) : Number
對property字段由start開始到end求和
事件清單
add : ( Store this, Ext.data.Record[] records, Number index )
beforeload : ( Store this, Object options )
clear : ( Store this )
datachanged : ( Store this )
load : ( Store this, Ext.data.Record[] records, Object options )
loadexception : ()
metachange : ( Store this, Object meta )
remove : ( Store this, Ext.data.Record record, Number index )
update : ( Store this, Ext.data.Record record, String operation )
看名字都很簡單,參數也不複雜,略過
用例

//得到遠端json對象

//其中jsoncallback.js内容為

//{ 'results': 2, 'rows': [

// { 'id': 1, 'name': 'Bill', occupation: 'Gardener' },

// { 'id': 2, 'name': 'Ben', occupation: 'Horticulturalist' } ]

//}

//定義proxy
var proxy=new Ext.data.HttpProxy(...{url:'jsoncallback.js'});

//定義reader

var reader=new Ext.data.JsonReader(
...{
totalProperty: "results",//totalRecords屬性由json.results得到
root: "rows", //構造中繼資料的數組由json.rows得到
id: "id" //id由json.id得到
},[
...{name: 'name', mapping: 'name'},
...{name: 'occupation'} //如果name與mapping同名,可以省略mapping

]

)

//建構Store
var store=new Ext.data.Store(...{
proxy:proxy,
reader:reader
});

//載入

store.load();
示例2
//得到遠端xml檔案
//其中xml檔案内容為

<?xml version="1.0" encoding="utf-8" ?>

<dataset>

<results>2</results>

<row>

<id>1</id>

<name>Bill</name>

<occupation>Gardener</occupation>

</row>


<id>2</id>

<name>Ben</name>

<occupation>Horticulturalist</occupation>


</dataset>
var proxy=new Ext.data.HttpProxy(...{url:'datasource.xml'});

var reader = new Ext.data.XmlReader(...{
totalRecords: "results",
record: "row",
id: "id"
}, [
...{name: 'name', mapping: 'name'},
...{name: 'occupation'}

]);
var store=new Ext.data.Store(...{

示例3

//從本地數組得到

var arr=[ [1, 'Bill', 'Gardener'], [2, 'Ben', 'Horticulturalist'] ];

var reader = new Ext.data.ArrayReader(
...{id: 0},

[
...{name: 'name', mapping: 1},
...{name: 'occupation', mapping: 2}



store.loadData(arr);