Ext StoreWord下载.docx
- 文档编号:5634068
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:23
- 大小:26.32KB
Ext StoreWord下载.docx
《Ext StoreWord下载.docx》由会员分享,可在线阅读,更多相关《Ext StoreWord下载.docx(23页珍藏版)》请在冰点文库上搜索。
varmyRecord=Ext.data.Record.create([
{name:
fullname'
convert:
fullName},
firstname'
mapping:
name.first'
},
lastname'
name.last'
city'
defaultValue:
homeless'
state'
location'
location}
]);
varstore=newExt.data.Store({
reader:
newExt.data.JsonReader({idProperty:
key'
root:
rows'
totalProperty:
total'
}),
myRecord
});
varmyData=[
{key:
1,name:
{first:
Fat'
last:
Albert'
}//nocity},
2,name:
Barney'
Rubble'
},city:
Bedrock'
state:
Stoneridge'
3,name:
Cliff'
Claven'
Boston'
MA'
}
];
一些实用功能,下面是用法:
*dateFormat:
日期格式。
*defaultValue:
字段的默认值。
当将Reader中原始数据转换成Store的Record时,找不到对应的数据,则使用该值代替。
默认值是空字符串。
*mapping:
将Reader中的字段映射到Record的字段中,如果Reader中的字段与Record的字段名称相同,可以不设置该属性。
*name:
字段的名称。
*storDir:
排序方式。
值“ASC”表示升序,“DESC”表示降序。
默认值是“ASC”。
*type:
字段的数据类型。
它包含以下数据类型:
auto(默认,不会进行数据类型转换)、string、int、float、boolean、date。
1.3Ext.data.Record
Record是Store最小的数据单元,它除了记录Store的一行数据信息,还记录了这些数据的状态,并可修改这些状态。
其属性和方法如下:
*data:
存储了该记录的数据信息。
*dirty:
只读属性,表示该记录是否被编辑过。
*fields:
记录的字段信息。
*id:
当前记录的唯一标记。
*modified:
当记录的某个数据被修改后,会在这里保存数据的原始值。
*phantom:
当该值为false时,表示服务器端数据库内没有该条数据。
*store:
记录所在的store。
*beginEdit:
开始编辑记录,其使用方法如下:
record.beginEdit();
*cancelEdit:
取消当前记录的修改,其使用方法如下:
record.cancelEdit();
*commit:
确认更新数据。
一般情况是使用Store的commitChanges方法,其使用方法如下:
mit();
mit(true);
//更新数据但不触发Store的change事件
*copy:
复制一个记录。
其使用方法如下:
record.copy();
//自动产生一个id
record.copy("
id1"
);
//使用id1作为新记录的id
*create:
构建一个记录结构。
该方法通常用于为Store增加一条新记录前构造一个记录结构,然后再创建新记录,并添加到Store。
varTopicRecord=Ext.data.Record.create([
title'
author'
allowBlank:
false}
varmyNewRerord=newTopicRecord(
{title:
测试'
author:
张三'
myStore.add(myNewRecord);
*endEdit:
结束编辑。
如果有数据被修改,Store的update事件将会被触发,其使用方法参考beginEdit方法。
*get:
获取某个字段的值。
record.get('
company'
//获取company的值
*getChanges:
获取被修改的字段。
varrec=record.getChanges();
*isModified:
判断某个字段是否已被修改。
//判断字段company是否已被修改
if(record.isModified('
){
//处理过程
}
*isValid:
检验Record是否有效,主要是检验设置了Ext.data.Field.allowBlank为true的字段。
if(record.isValid()){
*markDirty:
标记记录已被修改。
record.markDirty();
*reject:
取消记录的修改,回复原值。
一般情况是使用Store的rejectChanges方法。
record.reject();
record.reject(true);
*set:
设置某个字段的值。
varrec=myStore.getAt
(1);
//getAt(n),n表示行的索引值。
getAt表示获取行
rec.set('
name'
1.4ArrayReader、JsonReader和XmlReader
Reader的作用是将源数据转换成Record对象。
Store一般使用数组、JSON或XML等3种格式的数据,因而对应建立ArrayReader、JsonReader和XmlReader三个Reader。
因为Reader的作用是进行数据转换,所以定义一个Reader必须包含源数据的格式、Record的格式和两种格式之间的数据如何对应这三个部分。
明白这一点,对Reader的定义和使用就简单多了。
下面介绍这三种Reader的使用方法。
1.4.1JsonReader
JsonReader的数据定义只要提供root参数即可,它会根据root参数提供的属性名称去获取数据源中的数据。
totalProperty参数和idProperty参数都是可选的,totalProperty参数定义的是数据源中保存数据总数的属性名称,idProperty参数定义的是数据源中可作为记录唯一标记的字段名称,如果没有设置,Store会自动产生这个唯一标记。
字段映射需要在Record中定义。
通过下面的例子来了解一下具体定义方式:
varreader=newExt.data.JsonReader(
{
totalProperty:
results'
root:
idProperty:
id'
[
type:
int'
},//因为Record中该字段名称与数据源同名,所以不用设置mapping参数
username'
mapping:
}//映射数据源的name字段到Record的username字段
]
//以下返回的数据格式
{
results:
20,//记录总数
rows:
[//数据
{id:
1,name:
2,name:
李四'
...
从代码中可以看到:
JsonReader的第一个参数是数据源的定义,主要包含totalProperty、root和idProperty三个参数;
第二个参数则是Record对象的定义。
如果Record对象的字段名称与数据源的字段名称相同,则不需要定义mapping参数。
1.4.2ArrayReader
ArrayReader是从JsonReader扩展出来的,因为数组其实是JSON的一种简化形式,数组中的索引就相当于JSON格式中的属性名称。
通过下面的例子来了解一下具体的定义方式:
varreader=newExt.data.ArrayReader(
{
idIndex:
0
0},
1}
在数据源定义部分,idIndex参数代替了JsonReader的idProperty参数,而且其值为数组的索引值;
在Record定义部分,mapping定义也由数组的索引值代替了字段名称。
如果Record是数组按顺序读取的,也可以不设置mapping.
1.4.4XmlReader
虽然XmlReader不是从JsonReader扩展的,但是其定义方式与JsonReader类似。
不同的地方是,使用record参数代替了JsonReader的root参数,id参数代替idProperty参数了。
varreader=newExt.data.XmlReader(
record:
row'
id:
},//因为Record中该字段名称与数据源同名,所以不用设置mapping参数
<
?
xmlversion="
1.0"
encoding="
UTF-8"
>
dataset>
<
results>
20<
/results>
row>
id>
1<
/id>
name>
张三<
/name>
/row>
2<
李四<
/dataset>
从代码中可以看到,它的定义与JsonReader的定义没有太大区别,要注意的是数据源的数据格式。
1.5Store的加载数据
Store加载数据时有一下4种方式:
*在定义Store时,配置autoload参数,这样在Store创建时会自动调用load方法加载数据,其使用方法:
varstore=newExt.data.ArrayStore({
autoload:
true,
fields:
price'
float'
change'
pctChange'
lastChange'
date'
dateFormat:
n/jh:
ia'
//在autoload中配置提交参数
{page:
1},
在第二段代码中可以看到,在autoload中定义了一个对象“{page:
1}”,该对象会在调用load方法时作为参数传递给load方法。
*在创建Store后,执行load方法。
该方法一般用于加载远程数据,其使用方法:
[
store.load();
//带提交参数、回调函数以及追加数据
store.load({
params:
callback:
function(r,opts,success){//处理过程},
scope:
this,
add:
true
在代码中,回调函数是在Store的load事件执行后才执行的,参数r表示返回的记录集,opts表示调用load方法时的配置参数对象,success表示数据加载是否成功,参数add的作用是指示加载数据后不清空原有的数据,将新数据追加到原有数据里。
*在创建Store后,使用loadData方法加载数据,该方法一般用于加载本地数据,其使用方法:
store.loadData(datas);
//追加方式
store.loadData(datas,true)
*需要刷新数据,可以使用reload方法,其使用方法参考load方法。
在加载数据时,如果要修改提交参数,可使用baseParams属性设置,其使用方法如下:
store.baseParams.page=1;
也可以使用setBaseParam方法,其使用方法如下:
store.setBaseParam('
page'
1);
当然,也可以直接在load方法里当参数传递,其使用方法请看前面的load方法介绍。
1.6Store的数据操作
1.6.1添加数据
要给Store添加数据,可以使用insert方法、add方法、addSorted方法或loadData方法。
insert方法将在指定位置开始插入记录,一次可以插入多条记录;
add方法则直接增加一条或多条记录;
addSorted方法则在排序后的位置插入记录,该方法一次只能插入一条记录。
如果要使用loadData方法添加记录,则需要指定第2个参数为true,不然会清空原有数据再追加数据。
下面是它们的使用方法:
//添加单个记录
vardata={id:
1001,name:
};
varp=newstore.recordType(data,data.id);
store.insert(2,p);
//在第一条记录后插入
store.add(p);
store.addSorted(p);
store.loadData(p,true);
//添加多个记录
vardata1={id:
1001,name:
varp1=newstore.recordType(data1,data1.id);
vardata2={id:
1002,name:
varp2=newstore.recordType(data2,data2.id);
store.insert(0,[p1,p2]);
store.add([p1,p2]);
store.loadData([p1,p2],true);
1.6.2删除数据
在Store中删除数据有remove、removeAll和removeAt这3种方法。
它们的使用方法如下:
store.remove(rec);
//rec为一个记录
store.removeAll();
//删除所有记录
store.removeAt(10);
//10为索引值,
从上面代码中可以看到:
remove方法需要知道具体的记录才允许删除;
removeAll删除全部记录,并触发clear事件;
removeAt方法则删除指定位置的记录。
1.6.3搜索、定位和统计
Store提供了以下搜索和定位记录的方法:
*each:
枚举所有记录,当枚举函数返回false时,终止枚举操作。
store.each(function(rec){
*filter:
根据指定属性过滤记录。
//过滤掉不是name不包含“张”的记录
store.filter('
张'
true,false);
代码中的过滤规则可使用字符串,也可以使用正则表达式。
第3个参数如果为false,则表示只匹配开始位置,为true则表示匹配任何位置;
第4个参数如果为false,则表示不区分大小写,为true则表示要匹配大小写。
*filterBy:
通过一个函数过滤记录。
该函数会枚举每一个记录,然后根据函数返回值判断记录是否被过滤。
如果函数返回true,则包含该记录,如果返回false,则过滤掉该记录。
//返回id为单数的记录
store.filterBy(function(rec,id){
if(id%2==0){
returntrue;
else{
returnfalse;
*isFiltered:
判断Store当前是否处于过滤状态。
如果是,返回true;
否则,返回false。
if(store.isFiltered()){
store.clearFilter();
*clearFilter:
将Store恢复到没有进行过滤的状态,其使用方法可参考isFiltered中的代码。
*find:
根据指定属性查找匹配的记录,并返回匹配的第一个记录的索引值。
如果没有找到匹配的记录,则返回-1。
varindex=store.filter('
2,true,false);
与filter方法一样,搜索值可以是字符串,也可以是正则表达式。
第3个参数为搜索开始位置,默认值是0。
第4个参数如果为false,则表示只匹配开始位置,为true则表示匹配任何位置。
第5个参数如果为false,表示不区分大小写,如果为true则表示要区分大小写。
*findBy:
通过一个函数查找匹配的记录并返回匹配的第一个记录的索引值。
该函数会从指定的开始位置枚举每一个记录,然后根据返回值判断记录是否匹配。
如果函数返回true,则表示已经找不到匹配记录,枚举操作结束并返回匹配记录的索引值。
如果没有找到匹配的记录,方法返回值为-1。
store.findBy(function(rec,id){
else{
},2);
在代码中,第2个参数“2”表示查找的开始位置。
*findExact:
与find方法作用一样,只是没有匹配位置和区分大小写参数。
其使用方法可参考find方法。
*getAt:
根据索引值获取一个记录,其使用方法:
//获得第2条记录
varrec=store.getAt
(2);
*getById:
根据记录id返回记录,其使用方法:
//获得id为2的记录
varrec=store.getById
(2);
*getCount:
返回Store的记录总数。
如果没有采用分页方式,则其返回结果与getTotalCount方法一样。
如果采用了分页方式,则getCount返回的是Store的记录总数,getTotalCount返回的才是数据库的记录总数,不过前提是
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Ext Store