/**
* Extjs常用Reader(数据读取器)详解
* 数据读取器作用是将数字、json等格式的原始数据转为extjs中所需的通用数据类型
*
* 1.ArrayReader
* 作用是从二维数组里以此读取数据,然后生成对应的Record;
* 因为从proxy中读取的数据需要进行解析,这些数据转换成Record数组后才能提供给Ext.data.Store使用。
*
* 默认情况按列顺序读取数组中的数据。不过可以用mapping指定record与原始数组对应的列号。
* ArrayReader的用法很简单,但缺点是不支持分页。
* var data = [
* [‘id1’,’name1’,’descn1’],
* [‘id2’,’name2’,’descn2’]
* ];
* var reader = new Ext.data.ArrayReader({
* id:1
* },[
* {name:’name’,mapping:1},
* {name:’descn’,mapping:2},
* {name:’id’,mapping:0}
* ]);
*
* 上面的代码中,data的顺序和reader的顺序不一样,如果顺序一样就不需要用到mapping。
*
* 2.JsonReader
*
* json数据:
* var data = {
* id:0,
* totalProperty:2,
* successProperty:true,
* root:[{id:’id1’,name:’name1’,descn:’descn1’},
* {‘id:’id2’,name:’name2’,descn:’descn2’}
* ]
* };
*
* JSON的最大优势就是支持分页.
* totalProperty参数表示数据的总量。
* successProperty参数是可选的,可以用它判断当前请求是否执行成功,进而判断是否进行数据加载。
* 在不希望JsonReader处理响应数据时,可以把successProperty设置成false
*
* JsonReader是如何和JSON数据对应的
* var reader = new Ext.data.JsonReader({
* successProperty:” successProperty”,
* totalProperty:” totalProperty”,
* root:”root”,
* id:”id”,
* },[
* {name:’id’,mapping:’id’},
* ]);
*
* 3. XmlReader:使用的XML格式的数据
*
* eg:
* <?xml version="1.0" encoding="utf-8"?>
<dataset>
<id>1</id>
<totalRecords>2</totalRecords>
<success>true</success>
<record>
<id>1</id>
<name>name1</name>
<descn>descn1</descn>
</record>
<record>
<id>2</id>
<name>name2</name>
<descn>descn2</descn>
</record>
</dataset>
*这里一定要用dataset作为xml根元素
*
*使用xmlReader进行配置,读取xml数据
var reader = new Ext.data.XmlReader({
totalRecords:’ totalRecords’,
success:’ success’,
record:’ record’,
id:’ id’
},[‘id’,’name’,’descn’]);
*totalRecords用来指定从’totalRecords’标签里获得后台数据总数;
*record表示XML中放在record标签里的数据是我们需要显示的结果数据;
*
*因为XmlReader不能将JavaScript中的字符串自动解析成XML格式的数据,
*所以需要利用其他方式。参考localXHR.js中构造XML的方式,有了下面的解决方案:
*eg:
*
var data = "<?xml version="1.0" encoding="utf-8"?>" +
"<dataset>" +
"<id>1</id>"+
"<totalRecords>2</totalRecords>"+
"<success>true</success>"+
"<record>"+
"<id>1</id>"+
"<name>name1</name>"+
"<descn>descn1</descn>"+
"</record>"+
"<record>"+
"<id>2</id>"+
"<name>name2</name>"+
"<descn>descn2</descn>"+
"</record>"+
"</dataset>";
var xdoc;
if(typeof(DOMParser)=='undefined'){
xdoc = new ActiveXObject("Microsoft.XMLDOM");
xdoc.async="false";
xdoc.loadXML(data);
}else{
var domParser = new DOMParser();
xdoc = domParser.parseFromString(data,'application/xml');
domParser = null;
}
var proxy = new Ext.data.MemoryProxy(xdoc);
var reader = new Ext.data.XmlReader({
totalRecords:'totalRecords',
success:'success',
record:'record',
id:"id"
},['id','name','descn']);
var ds = new Ext.data.Store({
proxy:proxy,
reader:reader
*
*
*/
Ext.onReady(function() {
})