Ext.data.Store
2013
15:43
Ext.data.Store
类型转换、排序分页和搜索等操作的。
Ext.data.Store
Ext.data.Store的基本用法
在使用之前,首先要创建一个
- var data = [
- ['boy', 0],
- ['girl', 1]
- ];
- var store = new Ext.data.Store({
- proxy: new Ext.data.MemoryProxy(data),
- reader: new Ext.data.ArrayReader({}, PersonRecord)
- });
- store.load();
- var data = [ ['boy', 0], ['girl', 1] ]; var store = new Ext.data.Store({ proxy: new Ext.data.MemoryProxy(data), reader: new Ext.data.ArrayReader({}, PersonRecord) }); store.load();
var data =[ ['boy', 0],
每个
reader用于将原始数据转换成
这里我们使用的是
然后放入store中。
store
经过转换之后,
Ext.data.Store对数据进行排序
Ext.data.Store
可以在创建
- var store = new Ext.data.Store({
- proxy: new Ext.data.MemoryProxy(data),
- reader: new Ext.data.ArrayReader({}, PersonRecord),
- sortInfo: {field: 'name', direction: 'DESC'}
- });
- var store = new Ext.data.Store({ proxy: new Ext.data.MemoryProxy(data), reader: new Ext.data.ArrayReader({}, PersonRecord), sortInfo: {field: 'name', direction: 'DESC'} });
var store = newExt.data.Store({ proxy: newExt.data.MemoryProxy(data), reader:new Ext.data.ArrayReader({}, PersonRecord), sortInfo: {field: 'name', direction: 'DESC'} });
这样,在
也会达到同样效果。
也可以在任何时候调用
如果我们希望获得
的JSON
与排序相关的参数还有
当设置为
分别对应排序的字段和排序的方式,由后台获取并处理这两个参数,在后台对所需数据进行排序操作。
remoteSort:true
Ext.data.Store从store
从
最直接的方法是根据
如下面的代码所示。
- store.getAt(0).get('name')
- store.getAt(0).get('name')
store.getAt(0).get('name')
通过这种方式,我们可以遍历
- for (var i = 0; i < store.getCount(); i++) {
- var record = store.getAt(i);
- alert(record.get('name'));
- }
- for (var i = 0; i < store.getCount(); i++) { var record = store.getAt(i); alert(record.get('name')); }
for (var i = 0;i < store.getCount(); i++) { varrecord = store.getAt(i); alert(record.get('name')); }
Store.getCount()返回的是
除了使用getCount()
- store.each(function(record) {
- alert(record.get('name'));
- });
- store.each(function(record) { alert(record.get('name')); });
store.each(function(record){ alert(record.get('name')); });
Each()
如果希望停止遍历,可以让
也可以使用
- var records = store.getRange(0, 1);
- for (var i = 0; i < records.length; i++) {
- var record = records[i];
- alert(record.get('name'));
- }
- var records = store.getRange(0, 1); for (var i = 0; i < records.length; i++) { var record = records[i]; alert(record.get('name')); }
var records =store.getRange(0, 1); for (var i = 0; i< records.length; i++) { varrecord = records[i]; alert(record.get('name')); }
注意:
获得grid
获得一条记录的方法
获得该条记录中某个字段的方法:
获得指定记录之间的方法:
varrecords = _store.getRange(0,2);
vartempRecord = records[i];
然后可以通过tempRecord.get("XXXX")
如果确实不知道
- store.getById(1001).get('name')
- store.getById(1001).get('name')
store.getById(1001).get('name')
EXT还提供了函数
- find( String property, String/RegExp value, [Number startIndex], [Boolean anyMatch],[Boolean caseSensitive] )
- find( String property, String/RegExp value, [Number startIndex], [Boolean anyMatch],[Boolean caseSensitive] )
find( Stringproperty, String/RegExp value, [Number startIndex], [Boolean anyMatch],[BooleancaseSensitive] )
在这
第一个参数
第二个参数
第三个参数
第四个参数
第五个参数
如下面的代码所示:
- var index = store.find('name','g');
- alert(store.getAt(index).get('name'));
- var index = store.find('name','g'); alert(store.getAt(index).get('name'));
var index =store.find('name','g'); alert(store.getAt(index).get('name'));
与
- findBy( Function fn, [Object scope], [Number startIndex] ) : Number
- findBy( Function fn, [Object scope], [Number startIndex] ) : Number
findBy(Function fn, [Object scope], [Number startIndex] ) : Number
findBy()
fn
fn
record无需自定义
- index = store.findBy(function(record, id) {
- return record.get('name') == 'girl' && record.get('sex') == 1;
- });
- alert(store.getAt(index).get('name'));
- index = store.findBy(function(record, id) { return record.get('name') == 'girl' && record.get('sex') == 1; }); alert(store.getAt(index).get('name'));
index =store.findBy(function(record, id) { return record.get('name') == 'girl' && record.get('sex') == 1;}); alert(store.getAt(index).get('name'));
通过
我们还可以使用
与
- alert(store.query('name', 'boy'));
- alert(store.queryBy(function(record) {
- return record.get('name') == 'girl' && record.get('sex') == 1;
- }));
- alert(store.query('name', 'boy')); alert(store.queryBy(function(record) { return record.get('name') == 'girl' && record.get('sex') == 1; }));
alert(store.query('name','boy')); alert(store.queryBy(function(record) {
Ext.data.Store更新store
可以使用
如下面的代码所示。
- store.add(new PersonRecord({
- name: 'other',
- sex: 0
- }));
- store.add(new PersonRecord({ name: 'other', sex: 0 }));
store.add(newPersonRecord({ name: 'other',
Add()
- store.add([new PersonRecord({
- name: 'other1',
- sex: 0
- }), new PersonRecord({
- name: 'other2',
- sex: 0
- })]);
- store.add([new PersonRecord({ name: 'other1', sex: 0 }), new PersonRecord({ name: 'other2', sex: 0 })]);
store.add([newPersonRecord({ name: 'other1',
Add()
如果希望根据store原来的排序方式将新数据插入到对应的位置,可以使用
它会在添加新数据之后立即对
- store.addSorted(new PersonRecord({
- name: 'lili',
- sex: 1
- }));
- store.addSorted(new PersonRecord({ name: 'lili', sex: 1 }));
store.addSorted(newPersonRecord({ name: 'lili',
store
这个函数需要预先为store设置本地排序,否则会不起作用。
如果希望自己指定数据插入的索引位置,可以使用
可以使用record实例或
- store.insert(3, new PersonRecord({
- name: 'other',
- sex: 0
- }));
- store.insert(3, [new PersonRecord({
- name: 'other1',
- sex: 0
- }), new PersonRecord({
- name: 'other2',
- sex: 0
- })]);
- store.insert(3, new PersonRecord({ name: 'other', sex: 0 })); store.insert(3, [new PersonRecord({ name: 'other1', sex: 0 }), new PersonRecord({ name: 'other2', sex: 0 })]);
store.insert(3,new PersonRecord({ name:'other', sex: 0 }));
删除操作可以使用
- store.remove(store.getAt(0));
- store.removeAll();
- store.remove(store.getAt(0)); store.removeAll();
store.remove(store.getAt(0));store.removeAll();
store
对这个record内部数据的修改会直接反映到
- store.getAt(0).set('name', 'xxxx');
- store.getAt(0).set('name', 'xxxx');
store.getAt(0).set('name','xxxx');
修改
执行commitChanges()
record数组。
与修改数据相关的参数是
这样,在每次执行删除或
的record
Ext.data.Store加载及显示数据
store
下面的代码所示。
- store.load({
- params: {start:0,limit:20},
- callback: function(records, options, success){
- Ext.Msg.alert('info', '加载完毕');
- },
- scope: store,
- add: true
- });
- store.load({ params: {start:0,limit:20}, callback: function(records, options, success){ Ext.Msg.alert('info', '加载完毕'); }, scope: store, add: true });
store.load({
1. params是在
2.callback是加载完毕时执行的回调函数,它包含
传递的参数,success表示是否加载成功。
3.Scope用来指定回调函数执行时的作用域。
4.Add为true时,
store中。
一般来说,为了对
以后再次执行reload()重新加载数据时,
如果有一些需要固定传递的参数,也可以使用
后台处理,如下面的代码所示。
- store.baseParams.start = 0;
- store.baseParams.limit = 20;
- store.baseParams.start = 0; store.baseParams.limit = 20;
store.baseParams.start= 0; store.baseParams.limit = 20;
为
只显示符合条件的部分,如下面的代码所示。
- filter( String field, String/RegExp value, [Boolean anyMatch], [Boolean caseSensitive] ) : void
- filter( String field, String/RegExp value, [Boolean anyMatch], [Boolean caseSensitive] ) : void
filter( Stringfield, String/RegExp value, [Boolean anyMatch], [Boolean caseSensitive] ) :void
filter()
- store.filter('name', 'boy');
- store.filter('name', 'boy');
store.filter('name','boy');
对应的
- store.filterBy(function(record) {
- return record.get('name') == 'girl' && record.get('sex') == 1;
- });
- store.filterBy(function(record) { return record.get('name') == 'girl' && record.get('sex') == 1; });
store.filterBy(function(record){ return record.get('name') == 'girl'&& record.get('sex') == 1; });
如果想取消过滤并显示所有数据,那么可以调用
- store.clearFilter();
- store.clearFilter();
store.clearFilter();
如果想知道
Ext.data.Store其他功能
除了上面提到的数据获取、排序、更新、显示等功能外,
- collect( String dataIndex, [Boolean allowNull], [Boolean bypassFilter] ) : Array
- collect( String dataIndex, [Boolean allowNull], [Boolean bypassFilter] ) : Array
collect( StringdataIndex, [Boolean allowNull], [Boolean bypassFilter] ) : Array
collect
空字符串,否则collect函数会自动将这些空数据过滤掉。当
无论查询条件是什么都会忽略掉,返回的信息是所有的数据,如下面的代码所示。
- alert(store.collect('name'));
- alert(store.collect('name'));
alert(store.collect('name'));
这样会获得所有name列的值,示例中返回的是包含了
getTotalCount()
都是返回当前的数据总数,如下面的代码所示。
- alert(store.getTotalCount());
- alert(store.getTotalCount());
alert(store.getTotalCount());
indexOf(Ext.data.Recordrecord)和indexOfId(String id)函数根据
如下面的代码所示。
- alert(store.indexOf(store.getAt(1)));
- alert(store.indexOfId(1001));
- alert(store.indexOf(store.getAt(1))); alert(store.indexOfId(1001));
alert(store.indexOf(store.getAt(1)));alert(store.indexOfId(1001));
loadData(objectdata, [Boolean append])从本地
将读取的数据附加到原数据后,否则执行整体更新,如下面的代码所示。
- store.loadData(data, true);
- store.loadData(data, true);
store.loadData(data,true);
Sum(Stringproperty, Number start, Number end):Number用于计算某一个列
从start
- alert(store.sum('sex'));
- alert(store.sum('sex'));
alert(store.sum('sex'));
如果省略参数
store
表store提供的事件
事件名 | 参 数 |
add | ( Store this, Ext.data.Record[] records, Number index ) |
beforelaod | ( Store this, Object options ) |
clear | ( Store this ) |
datachanged | ( Store this ) |
load |
|
来自 <
已使用 Microsoft OneNote 2013 创建。