1.设置store排序
第一种:
var store = new Ext.data.Store({
//排序
sortInfo : {
field : 'age',
direction : 'desc'
}
});
第二种:
store.setDefaultSort('age','desc');
1.1获取Ext.data.Store的排列信息
store.getSortState();//返回类似{field:'age',direction:'desc'}JSON对象
2.从store中获取数据
2.1遍历Ext.data.Store
第一种:
for(var i=0;i<store.getCount();i++){
//获取i个record
var record = store.getAt(i);
//获取i个record的name值
var name = record.get('name');
}
第二种:
store.each(function(record){
var name = record.get('name');
});
如果需要停止遍历需要让function()返回false
2.2使用getRange()函数获取多个record
var record = store.getRange(0,1);//两个参数分别是开始和结束位置索引值
2.3使用record本身的id从store中获取对应的record
var record = store.getById(1001);
2.4使用find()对store数据进行索引
store.find(String property,String/RegExp value,Number startIndex,Number anyMatch,Boolean caseSensitive){
/*
第一个参数property代表搜索的字段名,
第二个参数value是匹配用字符串或者正则表达式
第三个参数startIndex表示从第几行开始搜索
第四个参数anMatch为true时,不必从头开始匹配
第五个参数caseSensitive为true时,去区分大小写
*/
};
代码:
var index = store.find('name','g');
var record = store.getAt(index);
var name = record.get('name');
2.5使用findBy()对store数据进行索引
store.findBy(Function fn,Object scope,Number startIndex){
/*
findBy()函数允许用户使用自定义函数对内部数据进行搜索,fn返回ture,表示查找成功,于是停止遍历并且返回行号
*/
}
代码:
var index = store.findBy(function(record,id){
//如果name=lwc就返回
return record.get('name')=='lwc';
});
var record = store.getAt(index);
var name = record.get('name');
3.更新store中的数据
3.1给store末尾插入record,不排序
//给store增加一个record
store.add(
new MyRecord({
name : 'lwc',
age : 18
})
);
//给store增加多个record
store.add([
new MyRecord({
name : 'lwc',
age : 18
}),
new MyRecord({
name : 'wr',
age : 17
}),
]);
3.2给store末尾插入record,带排序
//这个函数必须事先给store设置本地排序
store.addSorted(
new MyRecord({
name : 'lwc',
age : 18
})
);
store.addSorted([
new MyRecord({
name : 'lwc',
age : 18
}),
new MyRecord({
name : 'wr',
age : 17
}),
]);
3.3如果希望自定指定的数据插入索引位置,使用insert()函数,第一个参数代表索引位置
store.insert(3,
new MyRecord({
name : 'lwc',
age : 18
})
);
store.insert(3,[
new MyRecord({
name : 'lwc',
age : 18
}),
new MyRecord({
name : 'wr',
age : 17
}),
]);
3.4删除操作可以使用remove()和removeAll()函数
store.remove(store.getAt(0));
store.removeAll();
3.5store中没有修改某一行record的操作,我们需要先得到record再对record进行修改
store.getAt(0).set('name','wr');
/*
修改record内部数据之后有两种选择:
执行rejectChanges()撤销所有修改,将修改过的record恢复到原来的状态,
执行commitChanges()提交数据修改
在执行撤销和提交操作之前可以使用getModifiedRecords获得store中修改过的record数组
与修改相关的参数是pruneModifiedRecords,如果设置ture,那么每次执行删除或者reload操作会清空修改,
这样,在每次执行删除或者reload操作之后,getModifiedRecords()返回的就是一个空数组,
否则仍然会得到上次修改过的record记录
*/
4.加载以及显示数据
store.load({
params : {start:0,limit:20},//store加载传递的参数
/*
加载完毕时执行的回调函数
records表示获取的数据,options表示执行load()时传递的参数,success表示是否加载成功
*/
callback : function(records,options,success){
Ext.Msg.alert('info','加载成功...');
},
scope : store,//回调函数的作用域
add : true//load()得到数据添加在原来的store数据末尾,否则先清除后添加
});
/*
reload()会重新加载数据,store会自动使用上次load()包含的参数
有固定传递的参数可以使用baseParams,它是一个JSON对象
store.baseParams.start = 0;
store.baseParams.limit = 20;
*/
5.store过滤使用fiter()和filterBy()
如果想让不需要的store不显示使用这两个方法
代码省略参考上面的find()和findBy()
取消过滤store.clearFilter()
想知道store是否设置了过滤器可以使用isFiltered()函数进行判断
6.其他功能
//用于翻页获取后台传递过来的数据总数,如果没有设置翻页getTotalCount和getCount()相同,都返回当前数据的总数
store.getTotalCount();
//这两个函数都是根据record或者record的id获得record对应的行号
store.indexOf(store.getAt(1));
store.indexOfId(1001);
//从本地javascript中读取数据,append为true时,就会将读取的所有数据附加到store中原来的数据后面,否则就会执行整体更新
store.loadData(data,true);
//用于计算某一个列从start到end的总和,如果省略start和end就是计算全部的
sum(String property,Number start,Number end)
store.sum('sex');