`
anson_xu
  • 浏览: 510680 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类

Ext 常用reader

    博客分类:
  • Ext
阅读更多
10.6 常用Reader

10.6.1 ArrayReader

从proxy中读取的数据需要进行解析,这些数据转换成Record数组后才能提供给Ext.data. Store使用。

ArrayReader的作用是从二维数组里依次读取数据,然后生成对应的Record。默认情况下是按列顺序读取数组中的数据,不过你也可以考虑用mapping指定record与原始数组对应的列号。ArrayReader的用法很简单,但缺点是不支持分页。使用二维数组的方式如下面的代码所示。

var data = [

    ['id1','name1','descn1'],

    ['id2','name2','descn2']

];

对应的ArrayReader如下面的代码所示。

var reader = new Ext.data.ArrayReader({

    id:1

},[

    {name:'name',mapping:1},

    {name:'descn',mapping:2},

    {name:'id',mapping:0},

]);

我们演示的是字段顺序不一致的情况,如果字段顺序和列顺序一致,就不用额外配置mapping。

10.6.2 JsonReader

在JavaScript中,JSON是一种非常重要的数据格式,key:value的形式比XML那种复杂的标签结构更容易理解,代码量也更小,很多人倾向于使用它作为EXT的数据交换格式。为Json- Reader准备的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'},

    {name:'name',mapping:'name'},

    {name:'descn',mapping:'descn'}

]);

上例中的对应方式不够简洁,因为name和mapping部分的内容是相同的,其实这里的mapping可以省略,默认会用name参数从JSON中获得对应的数据。如果不想与JSON里的名字一样,也可以使用mapping修改。不过,mapping在这里还有其他用途,如代码清单10-3所示。

代码清单10-3 为JsonReader设置mapping进行数据映射

var data = {

    id:0,

    totalProperty:2,

    successProperty:true,

    root:[

        {id:'id1',name:'name1',descn:'descn1',person:{

            id:1,name:'man',sex:'male'

        }},

        {id:'id2',name:'name2',descn:'descn2',person:{

            id:2,name:'woman',sex:'female'

        }}

    ]

};

var reader = new Ext.data.JsonReader({

    successProperty: "successproperty",

    totalProperty: "totalProperty",

    root: "root",

    id: "id"

}, [

    'id','name','descn',

    {name:'person_name',mapping:'person.name'},

    {name:'person_sex',mapping:'person.sex'}

]);

在上面的代码中,我们使用JSON支持更复杂的嵌套结构,其中的person对象自身就拥有id、 name和sex等属性。在JsonReader中可以用mapping把这些嵌套的内部属性映射出来,赋予对应的record,而其他字段都不变。

10.6.3 XmlReader

XML是非常通用的数据传输格式,XmlReader使用的XML格式的数据如代码清单10-4所示。

代码清单10-4 XmlReader使用的XML格式的数据

<?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']);              

XmlReader使用的参数与之前介绍的JsonReader有些不同,我们可以看到这里用到了 totalRecords和record两个参数,其中totalRecords用来指定从’totalRecords’标签里获得后台数据总数,record则表示XML中放在record标签里的数据是我们需要显示的结果数据。其他两个参数success和id的含义和JsonReader 中对应的参数相似,分别用来判断操是否成功和这次返回的id。因为XML中的标签和reader里需要的名字是相同的,所以简化了配置,将 [{name:’id’},{name:’name’},{name:’descn’}]直接写成了[‘id’,’name’,’descn’]。

因为XmlReader不能将JavaScript中的字符串自动解析成XML格式的数据,因此我们需要利用其他方法进行演示。参考localXHR.js中构造XML的方式,我们有了下面的解决方案,如代码清单10-5所示。

代码清单10-5 通过本地字符串构造XML对象

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 3.0 中文文档.zip

    四、Grid:Grid是Ext最常用的组件之一,用于展示表格数据。它可以处理大量的数据,支持行选择、排序、分页、列调整等功能。Grid的灵活性在于可以通过配置定义列的类型和行为,如使用模板渲染单元格内容,或者添加...

    EXT教程EXT用大量的实例演示Ext实例

    Ext的基础知识点包括元素获取方法Ext.get、动态生成HTML的DomHelper和Template、以及数据处理相关的Ext.data命名空间中的proxy和reader系列。Ext对JSON格式的支持也很到位,提供了方便的API来加载和解析JSON数据。 ...

    Ext tree json 动态加载完美实例

    JSON是树Panel与服务器进行数据交互的常用格式。在本例中,服务器返回的JSON字符串包含节点信息,如ID、文本、子节点等。Tree Panel的`loader`可以通过`dataUrl`属性指定服务器端接口URL,当用户展开节点时,会自动...

    ext_ext_knew7pi_ajax_

    首先,`Ext.Ajax.request`是最常用的API,用于发起一个AJAX请求。你可以指定请求的URL、方法(GET或POST)、参数以及成功和失败的回调函数。例如,下面的代码会发送一个GET请求到服务器的特定端点: ```javascript ...

    ext实现动态树

    reader: new Ext.data.JsonReader({ totalProperty: "totalProperty", root: "root", fields: [ { name: "id" }, { name: "filename" }, { name: "url" }, { name: "parentId" } ] }) }); ``` 这里定义了...

    Ext Js权威指南(.zip.001

    7.3.2 数据的转换过程:ext.data.reader.xml、ext.data.reader.json和ext.data.reader.array / 315 7.3.3 reader对象的配置项 / 321 7.3.4 格式化提交数据:ext.data.writer.writer、ext.data.writer.json和ext....

    Ext中Ajax的应用

    reader: new Ext.data.JsonReader({ totalProperty: 'totalProperty', root: 'root' }, ['id', 'name', 'email']) }); var grid = new Ext.grid.GridPanel({ store: store, columns: [ {header: 'ID', ...

    Ext_comBox模糊查询

    在EXT JS中,Combox(下拉框组件)是一种常用的输入控件,它结合了文本输入框和下拉列表的功能,常用于数据选择和输入。本文将深入探讨如何在EXT中实现Combox的模糊查询功能,以及后台处理自动检索的方法。 模糊...

    EXT与数据库交互的事例

    EXT与数据库交互,主要是通过AJAX(Asynchronous JavaScript and XML)技术来实现的,尽管在实际应用中XML可能不再是最常用的交换数据格式,现在更多的是JSON。 EXT中的AJAX交互通常涉及到以下几个关键知识点: 1....

    Ext2[1].0框架的Grid使用介绍

    Grid控件是Ext2.0中最常用也是最强大的数据展示组件之一。它不仅可以展示静态数据,还可以动态加载数据,并支持排序、过滤等功能。为了更好地理解和使用Grid控件,我们需要掌握以下几个关键概念: 1. **ColumnModel...

    Ext与后台数据库交互

    - **Reader(数据读取器)**:`Ext.data.DataReader`定义了如何解析从服务器返回的数据。通常情况下,我们会根据返回数据的格式选择合适的读取器,比如对于JSON格式的数据,可以使用`JsonReader`。 Store还支持...

    Ext经典例子整合 快速上手必看

    这些示例涵盖了EXTJS开发中常用的基本组件,通过学习和实践这些例子,开发者可以快速理解和掌握EXTJS的工作原理,进而构建出功能丰富的Web应用程序。在实际开发中,还需要了解EXTJS的MVC架构、Store与Model的数据...

    Ext下拉列表

    在ExtJS中,下拉列表(ComboBox)是一种常用的UI组件,常用于实现选择项的输入控件,它结合了文本输入框和下拉菜单的功能。在本场景中,我们将探讨如何使用ExtJS创建一个动态从数据库读取数据的下拉列表。 1. **...

    ext 学习笔记

    在Ext JS中,组合框(`combo`)是一种常用的组件,用于展示下拉列表。在配置组合框时,`xtype:"combo"`定义了组件类型,`id:"race"`为其分配了一个唯一标识符。`store:mzstore`指定了数据存储,`valueField:'id'`和`...

    extmaxdate3.rar_ext_大数据

    3. **Ext.data.reader.Reader**:负责将服务器返回的数据转换为模型实例。对于大数据,通常会返回每页的记录以及总记录数,以便分页控件可以正确显示。 4. **Ext.data.proxy.Proxy**:定义数据如何从服务器获取,...

    Ext + dwr 实现分页功能

    reader: new Ext.data.JsonReader({ totalProperty: 'totalProperty', root: 'root' }) }); var grid = new Ext.grid.GridPanel({ store: store, columns: [ {header: 'Name', dataIndex: 'name', width: ...

    struts2+ext例子

    JSON因其轻量级和易于解析的特性,成为Web服务间交换数据的常用格式。 综上所述,"struts2+ext例子"是一个演示如何利用Struts2处理后端业务逻辑,并通过ExtJS展示数据的示例项目。它涵盖了Struts2的Action配置、...

    Ext深入浅出 数据传输

    10.6 常用Reader...........................................241 10.6.1 ArrayReader.........................241 10.6.2 JsonReader ...........................242 10.6.3 XmlReader.............................

    Extjs4 Grid分页与自动刷新

    在使用Extjs4进行Web应用开发时,Grid控件是常用的数据展示组件之一。对于大数据量的情况,通常需要使用分页来提高用户体验。下面详细介绍如何在Extjs4中实现Grid的分页功能。 **1.1 创建数据存储(Store)** 首先...

Global site tag (gtag.js) - Google Analytics