XmlReader的构造方法,数据存储

作者: 关于计算机  发布:2019-09-20

extjs3.0帮忙文书档案:
DataReader( Object meta, Array/Object recordType )
Create a new DataReader
参数:

第八章 、数据存款和储蓄 Stroe

meta : Object
Metadata configuration options (implementation-specific).
元数据配置选项(...-...)
recordType : Array/Object
Either an Array of Field definition objects
私自一个Field定义的靶子数组
which will be passed to Ext.data.Record.create,
用作指标传递给Ext.data.Record.create,
or a Record constructor created using Ext.data.Record.create.
或二个由Ext.data.Record.create创立的Record结构.
返回:
void

 

内部主要js代码:
Ext.data.DataReader = function(meta, recordType){
this.meta = meta;
this.recordType = Ext.isArray(recordType) ?
Ext.data.Record.create(recordType) : recordType;
this.buildExtractors();
};
...略...
rs.id = data[this.meta.idProperty];
...略...
return (data && Ext.isObject(data) &&
!Ext.isEmpty(data[this.meta.idProperty])) ? true : false;

8.1 、 Record

得出结论:
a.recordType可以直接是一个Field结构的数组,由中间代码加上Ext.data.Record.create(...)。
b.recordType能够是一度加上Ext.data.Record.create(...)的Field数组。
c.meta中得以放属性:idProperty。

 

extjs3.0协助文书档案:
XmlReader( Object meta, Object recordType )
Create a new XmlReader.
参数:
meta : Object
Metadata configuration options
recordType : Object
Either an Array of field definition objects as passed to Ext.data.Record.create,
随机二个田野先生定义的靶子数组作为参数字传送递给Ext.data.Record.create
or a Record constructor object created using Ext.data.Record.create.
依旧三个使用Ext.data.Record.create创设的Record结构对象。
返回:
void

在 后边的报表应用中,咱们早就掌握表格的数据是存放在类型为 Store 的数量存款和储蓄器中,
透过点名表格 Grid 的 store 属性来设置表格中展示的多少,通过调用 store 的 load 或 reload
措施能够另行加载表格中的数据。 ExtJS 中用来定义控件中运用数据的 API 位于 Ext.dd 命 名
空间中,本章大家最首要对 ExtJS 中的数据存款和储蓄 Store 进行介绍。
1、 Record Record Record
先是需求明显是, ExtJS 中有二个名字为 Record 的类,表格等控件中行使的多少是存放在 在
Record 对象中,三个 Record 可以明白为关周到据表中的一行,也能够称为记录。 Record 对
象中即包含了记录(行中各列)的定义新闻(也便是该记录包蕴哪些字段,每四个字段的 数
据项目等),同有时间又富含了笔录具体的多寡消息(也正是逐条字段的值)。
咱俩来看直接利用 Record 的代码:
Ext.onReady(function(){
var MyRecord = Ext.data.Record.create([
{name: 'title'},
{name: 'username', mapping: 'author'},
{name: 'loginTimes', type: 'int'},
{name: 'lastLoginTime', mapping: 'loginTime', type: 'date'}
]);
var r=new MyRecord({
title:" 日志标题 ",
username:"easyjf",
loginTimes:100,
loginTime:new Date()
});
alert(MyRecord.getField("username").mapping);
alert(MyRecord.getField("lastLoginTime").type);
alert(r.data.username);

可以看看需求传四个obj进去,

alert(r.get("loginTimes"));
});

翻开里面js代码
Ext.data.JsonReader = function(meta, recordType){
//若无meta,那创设贰个Obj给meta。
meta = meta || {};
//把idProperty等丰裕到meta,借使它未有这个成员。
Ext.applyIf(meta, {
idProperty: 'id',
successProperty: 'success',
totalProperty: 'total'
});
//调用父类
Ext.data.JsonReader.superclass.constructor.call(this, meta, recordType || meta.fields);
};
...略...
var sid = this.meta.idPath || this.meta.id;
var totalRecords = 0, success = true;
if(this.meta.totalRecords){
totalRecords = q.selectNumber(this.meta.totalRecords, root, 0);
}
if(this.meta.success){
var sv = q.selectValue(this.meta.success, root, true);
success = sv !== false && sv !== 'false';
}
能够:a.meta中得以有下列属性:idProperty、successProperty、totalProperty、田野同志s、idPath、id、totalRecords、success。
b.recordType可感到空,但要在meta中写田野(field)s。
c.调用了父类构造,所以任何的跟父类相同。

 

extjs3.0援助文书档案:
JsonReader( Object meta, Array/Object recordType )
Create a new JsonReader
Create a new JsonReader
参数:
meta : Object
Metadata configuration options.
recordType : Array/Object
Either an Array of Field definition objects
(which will be passed to Ext.data.Record.create,
or a Record constructor created from Ext.data.Record.create.
返回:
void

首先应用 Record 的 create 方法创制贰个笔录集 MyRecord , MyRecord 其实是贰个类,
此类包罗了记录集的概念音讯,能够经过 MyRecord 来创设包括字段值的 Record 对象。在
地点的代码中,最终的几条语句用来输出记录集的连带信息, MyRecord.getField("username ")
能够得到记录中 username 列的字段新闻, r.get("loginTimes") 能够博得记录 loginTimes 字段
的值,而 r.data.username 一样能博取记录集中 username 字段的值。
对 Record 有了迟早的刺探,那么要操作记录聚焦的数额就非常轻巧了,比方
r.set(name,value) 可以安装记录中某钦赐字段的值, r. dirty 能够收获当前记下是还是不是有字段的 值
被改造过等等。

翻看里面js代码:
Ext.data.JsonReader = function(meta, recordType){
meta = meta || {};
Ext.applyIf(meta, {
idProperty: 'id',
successProperty: 'success',
totalProperty: 'total' });
Ext.data.JsonReader.superclass.constructor.call(this, meta, recordType || meta.fields);
};
...略...
if (Ext.isEmpty(o[this.meta.root])) {
throw new Ext.data.JsonReader.Error('root-emtpy', this.meta.root);
}
else if (o[this.meta.root] === undefined) {
throw new Ext.data.JsonReader.Error('root-undefined-response', this.meta.root);
}

8.2、 Store

可见:a.meta中能够有下列属性:idProperty、successProperty、totalProperty、root、田野先生s
b.recordType可以为空,但要在meta中写田野先生s。
c.调用了父类构造,所以任何的跟父类同样

 

总结:...

Store 能够领略为多少存款和储蓄器,能够清楚为顾客端的Mini数据表,提供缓存等职能。在
ExtJS 中, GridPanel 、 ComboBox 、 DataView 等控件一般间接与 Store 打交道,直接通过 sto re
来获得控件中必要表现的数码等。四个 Store 包涵四个 Record ,同期 Store 又包括了数量来
源,数据深入分析器等有关音讯, Store 通过调用具体的数目深入分析器 (DataReader) 来解析钦定类 型
或格式的数据 (DataProxy) ,并转变到记录集的款型保留在 Store 中,作为别的控件的数据 输
入。
多少存款和储蓄器由 Ext.data.Store 类定义,贰个一体化的数额存款和储蓄器要知道数码源 (DataProxy)
及数量解析方法 (DataReader) 工夫工作,在 Ext.data.Store 类中数据源由 proxy 配置属性定义 、
数据深入分析(读取)器由 reader 配置属性定义,八个较为遵纪守法成立 Store 的代码如下:

您大概感兴趣的小说:

  • Execute里德r(),ExecuteNonQuery(),ExecuteScalar(),ExecuteXmlReader()之间的界别
  • Xml里德r 读取器读取内部存款和储蓄器流 MemoryStream 的注意事项
  • 基于C#中XmlReader读取Xml的深远解析
  • PHP中利用xmlreader读取xml数据示例
  • C#中哪些采纳 XmlReader 读取XML文件

var MyRecord = Ext.data.Record.create([
{name: 'title'},
{name: 'username', mapping: 'author'},
{name: 'loginTimes', type: 'int'},
{name: 'lastLoginTime', mapping: 'loginTime', type: 'date'}
]);
var dataProxy=new Ext.data.HttpProxy({url:"link.ejf"});
var theReader=new Ext.data.JsonReader({
totalProperty: "results",
root: "rows",
id: "id"
},MyRecord);
var store=new Ext.data.Store({
proxy:dataProxy,
reader:theReader
});

store.load();

 

理当如此,那样的难免代码比较多, Store 中本身提供了一些火速成立 Store 的点子,比方上 面
的亲自过问代码中能够不用先创设三个 HttpProxy ,只供给在开立 Store 的时候内定一个 url 配 置
参数,就能自行使用 HttpProxy 来加载参数。比方,上边的代码能够简化成:
var MyRecord = Ext.data.Record.create([
{name: 'title'},
{name: 'username', mapping: 'author'},
{name: 'loginTimes', type: 'int'},
{name: 'lastLoginTime', mapping: 'loginTime', type: 'date'}
]);
var theReader=new Ext.data.JsonReader({
totalProperty: "results",
root: "rows",
id: "id"
},MyRecord);
var store=new Ext.data.Store({
url:"",

proxy:dataProxy,
reader:theReader
});
store.load();

 

固然不再要求手动成立 HttpProxy 了,然则照旧须求创设 DataReader 等,毕竟照旧复 杂 ,
ExtJS 进一步把这种常用的数码存款和储蓄器实行了包装,在 Store 类的功底上提供了 SimpleStore 、
SimpleStore 、 GroupingStore 等,直接运用 SimpleStore ,则上边的代码能够进一步简化成下
面包车型地铁内容:
var store=new Ext.data.JSonStore({
url:"",
totalProperty: "results",
root: "rows",
fields:['title', {name: 'username', mapping: 'author'},
{name: 'loginTimes', type: 'int'},
{name: 'lastLoginTime', mapping: 'loginTime', type: 'date'}
]
});
store.load();

 

8.3  、 DataReader

 

DataReader 代表数据读取器,约等于数额解析器,其承受把从服务器或许内存数组、 x ml
文书档案中拿到的混乱消息转换到 ExtJS 中的记录集 Record 数据对象,并积存到 Store 里面包车型大巴 记
录集数组中。
数据分析器的基类由 Ext.data.DataReader 定义,另外具体的数码分析器都以此类的子 类 ,
ExtJS 中提供了读取二维数组、 JSon 数据及 Xml 文书档案的两种多少分析器,分别用于把内存
中的二级数组、 JSON 格式的数额及 XML 文书档案新闻深入分析成记录集。下边轻易的牵线:
1 1 1 ) ArrayReader ArrayReader ArrayReader
Ext.data.Array里德r -数组分析器,用于读取二维数组中的音讯,并转换到记录集 Record
目的。首先看上边的代码:
var MyRecord = Ext.data.Record.create([
{name: 'title', mapping:1},
{name: 'username', mapping:2},
{name: 'loginTimes', type:3}
]);
var myReader = new Ext.data.ArrayReader({
id: 0
}, MyRecord);

这里定义的 myReader 能够读取上边包车型客车二维数组:
[ [1, ' 测试 ', ' 小王 ',3], [2, ' 新年好 ', 'williamraym',13] ]

 

2 2 2 ) JsonReader JsonReader JsonReader
Ext.data.JsonReader - Json 数据解析器,用于读取 JSON 格式的数码消息,并转移成记
录集 Record 对象。看上面选拔 JsonReader 的代码:
var MyRecord = Ext.data.Record.create([
{name: 'title'},
{name: 'username', mapping: 'author'},
{name: 'loginTimes', type: 'int'}
]);
var myReader = new Ext.data.JsonReader({
totalProperty: "results",
root: "rows",
id: "id"
}, MyRecord);

 

此处的 JsonReader 能够深入分析下边包车型地铁 JSON 数据:
{ 'results': 2, 'rows': [
{ id: 1, title: ' 测试 ', author: ' 小王 ', loginTimes: 3 },
{ id: 2, title: 'Ben', author: 'williamraym', loginTimes:13} ]
}

 

JSonReader 还应该有比较特殊的用法,就是可以把 Store 中记录集的安排音信存放直接保 存
在从劳动器端重返的 JSON 数据中,举例下边包车型大巴例子:
var myReader = new Ext.data.JsonReader();

 

那七个不带别的参数的 myReader ,能够拍卖从劳动器端再次回到的底下 JSON 数据:
{
'metaData': {
totalProperty: 'results',
root: 'rows',
id: 'id',
fields: [
{name: 'title'},
{name: 'username', mapping: 'author'},
{name: 'loginTimes', type: 'int'} ]
},
'results': 2, 'rows': [
{ id: 1, title: ' 测试 ', author: ' 小王 ', loginTimes: 3 },
{ id: 2, title: ' 新年好 ', author: 'williamraym', loginTimes:13}]
}

 

3 3 3 ) XmlReader XmlReader XmlReader
Ext.data.XmlReader - XML 文书档案数据分析器,用于把 XML 文书档案数据调换到记录集 Rec ord
对象。看下边的代码:
var MyRecord = Ext.data.Record.create([
{name: 'title'},
{name: 'username', mapping: 'author'},
{name: 'loginTimes', type: 'int'}
]);
var myReader = new Ext.data.XmlReader({
totalRecords: "results",
record: "rows",
id: "id"
}, MyRecord);

 

地点的 myReader 能够深入分析下边包车型地铁 xml 文书档案新闻:
<topics>
<results>2</results>
<row>
<id>1</id>
<title> 测试 </ title >
<author> 小王 </ author >
<loginTimes>3</ loginTimes >
</row>
<row>
<id>2</id>
<title> 新年好 </ title >
<author> williamraym </ author >
<loginTimes>13</ loginTimes >
</row>
</topics>

 

8.4  、 DataProxy 与自定义 Stroe

 

DataProxy 字面解释正是数码代理,也得以知晓为数据源,也即从哪个地方或怎么着获得须求
付给 DataReader 剖判的数额。数据代理(源)基类由 Ext.data.DataProxy 定义,在 DataPro xy
的基础, ExtJS 提供了 Ext.data.MemoryProxy 、 Ext.data.HttpProxy 、 Ext.data.ScriptTagProxy
等八个分级用于从客商端内部存款和储蓄器数据、 Ajax 读取服务器端的数码及从跨域服务器中读取数据
等三种完结。
举个例子说像 SimpleStore 等存款和储蓄器是直接从从客商端的内部存款和储蓄器数组中读取数据,此时就足以直
接使用 Ext.data.MemoryProxy ,而大比非常多亟需从劳动器端加载的多寡直接运用
Ext.data.HttpProxy , HttpProxy 间接使用 Ext.Ajax 加载服务器的数码,由于这种诉求是不可能
跨域的,所以要要读取跨域服务器中的数据时就须求选取到 Ext.data.ScriptTagProxy 。
有关 DataProxy 的越来越多内容,请仿照效法 的 VIP 文书档案中的《 ExtJS 数据
积存 Store 详解》中的相关内容。
在实质上选取中,除了宗旨的从内部存款和储蓄器中读取 javascript 数组对象,从服务器读取 JSON 数
组,从服务器取 xml 文书档案等格局的数量外,不常候还亟需运用其余的数目读取形式。举例
熟稔 EasyJWeb 中国远洋运输总公司程 Web 脚本调用引擎或 DWKoleos等框架的都知晓,通过那一个框架大家可 以
直白在顾客端选取 javascript 调用服务器端业务组件的秘诀,并把劳动器端的结果回到到客
户端,客商端获得的是三个 javascript 对象或数组。由于这种格局的调用是异步的,由此,
相对来讲有一点非常,即不可能直接运用 Ext.data.MemoryPro xy ,也不能够一直运用
Ext.data.HttpProxy ,当然更无需 Ext.data.ScriptTagProxy ,那时候就必要成立自定义的
DataProxy 及 Store ,然后利用这么些自定义的 Store 来兑现这种基于远程脚本调用引擎的框架获得数码。

 

 

本文由贝博体育app发布于关于计算机,转载请注明出处:XmlReader的构造方法,数据存储

关键词:

上一篇:实现表格隔行换色一例,隔行换色
下一篇:没有了