`
yahaitt
  • 浏览: 760821 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

ExtJs中关于grid和store的应用分析(三)

阅读更多

第三部分:解析器与数据的关系


一、XmlReader的构造方法定义如下:

XmlReader( Object meta, Object recordType )


二、JsonReader的构造方法定义如下:

JsonReader( Object meta, Object recordType ) 


三、ArrayReader的构造方法定义如下:

ArrayReader( Object meta, Object recordType ) 


都表示实例化这些解析器时,需要传递2个参数,一个是meta,一个是recordType。
但是不同的解析器他们需要的meta的值为不同的。只需看各自的Config Options(即配置选项)。也就是说,meta是由配置选项组成的。而recordType是指通过Recorde.create方法得到的数据结构的定义。一般也可以为var fields = ["id","name","email","sex","age"];这样定义的fields。

一、XmlReader所接受的配置选项有:

id:
其值是作为数据唯一标志的字符串,必须为fields中某列的name值。如:id:"id",也可以是id:"name",但是这个时候,字段name的值要确保是能唯一标志数据的。
record:
其值为可以指定数据的字符串。如:record:"row"
success:
totalRecords:
其值为可以指定数据总数的字符串。如:totalRecords:"total"

二、JsonReader所接受的配置选项有:

id:
同XmlReader
root:
其值为可以指定数据的字符串。如:root:"result"
successProperty:
totalProperty:
其值为可以指定数据总数的字符串。如:totalProperty:"total"

三、ArrayReader所接受的配置选项有:

id:
同XmlReader

现在再来看一下解析器与数据的关系。
数据只要满足了解析器的要求,那么数据就能获取成功。什么叫满足解析器的要求呢?有两种方式均可满足解析器的要求。
第一种:给予的数据不包含metaData
第二种:给予的数据包含了metaData

ArrayReader和XmlReader需要的数据是没有metaData的,此时给予的数据需要包含以下内容:
1、ArrayReader:
比如ArrayReader如下定义:
var fields = ["id","name","email","sex","age"];
var reader = new Ext.data.ArrayReader({
  id:"id"
},fields);

给予的数据应该如下:
[[
	"1","langsin1","langsin@langsin.com","0","20"
],[
	"2","langsin2","langsin@langsin.com","1","21"
],[
	"3","langsin3","langsin@langsin.com","0","22"
],[
	"4","langsin4","langsin@langsin.com","1","23"
],[
	"5","langsin5","langsin@langsin.com","0","24"
]]

也就是必须为二维数组。
此时二维数组中的每列的数据顺序与fields中的字段名的定义是从左向右一一匹配,即,这里有5条数据,第一条数据是:
id的值为"1",
name的值为"langsin1",
email的值为"langsin@langsin.com",
sex的值为"0",
age的值为"20"

2、XmlReader
比如XmlReader如下定义:
var fields = ["id","name","email","sex","age"];
var reader = new Ext.data.XmlReader({
  id:"id",
  record:"row",
  totalRecords:"results"
},fields);

给予的数据应该如下:
<?xml version="1.0" encoding="utf-8"?>
<dataset>
	<results>2</results>
	<row>
		<id>1</id>
		<name>langsin1</name>
		<email>langsin@langsin.com</email>
		<sex>0</sex>
		<age>20</age>
	</row>
	<row>
		<id>2</id>
		<name>langsin2</name>
		<email>langsin@langsin.com</email>
		<sex>1</sex>
		<age>21</age>
	</row>
	<row>
		<id>3</id>
		<name>langsin3</name>
		<email>langsin@langsin.com</email>
		<sex>0</sex>
		<age>22</age>
	</row>
	<row>
		<id>4</id>
		<name>langsin4</name>
		<email>langsin@langsin.com</email>
		<sex>1</sex>
		<age>23</age>
	</row>
	<row>
		<id>5</id>
		<name>langsin5</name>
		<email>langsin@langsin.com</email>
		<sex>0</sex>
		<age>24</age>
	</row>
</dataset>

这里dataset标签可以换车其他任何字母组成的标签,如aaa,不会影响最后数据的读取。
但是这个dataset标签对里就必须要有1个或多个的results和row标签对。

现在再来看下JsonReader。
JsonReader可以用第一种也可以用第二种的数据给予方式。
1、给予的数据不包含metaData的情况时:
比如JsonReader如下定义:
var fields = ["id","name","email","sex","age"];
var reader = new Ext.data.JsonReader({
  id:"id",
  root:"result",
  totalProperty:"total"
},fields);

给予的数据应该如下:
{
	total:5,
	result:[{
		id:"1",
		name:"langsin1",
		email:"langsin@langsin.com",
		sex:"0",
		age:"20"
	},{
		id:"2",
		name:"langsin2",
		email:"langsin@langsin.com",
		sex:"1",
		age:"21"
	},{
		id:"3",
		name:"langsin3",
		email:"langsin@langsin.com",
		sex:"0",
		age:"22"
	},{
		id:"4",
		name:"langsin4",
		email:"langsin@langsin.com",
		sex:"1",
		age:"23"
	},{
		id:"5",
		name:"langsin5",
		email:"langsin@langsin.com",
		sex:"0",
		age:"24"
	}]
}


如果定义时不包含root配置选项时,那么给予的数据应该如下:
[{
	id:"1",
	name:"langsin1",
	email:"langsin@langsin.com",
	sex:"0",
	age:"20"
},{
	id:"2",
	name:"langsin2",
	email:"langsin@langsin.com",
	sex:"1",
	age:"21"
},{
	id:"3",
	name:"langsin3",
	email:"langsin@langsin.com",
	sex:"0",
	age:"22"
},{
	id:"4",
	name:"langsin4",
	email:"langsin@langsin.com",
	sex:"1",
	age:"23"
},{
	id:"5",
	name:"langsin5",
	email:"langsin@langsin.com",
	sex:"0",
	age:"24"
}]


2、给予的数据包含metaData的情况时:
比如JsonReader如下定义:
var reader = new Ext.data.JsonReader({
  id:"id",
},fields);

给予的数据应该如下:
{
	metaData:{
		fields:["id","name","email","sex","age"],
		root:"result"
	},
	result : [{
		id : "1",
		name : "langsin1",
		email : "langsin@langsin.com",
		sex : "0",
		age : "20"
	}, {
		id : "2",
		name : "langsin2",
		email : "langsin@langsin.com",
		sex : "1",
		age : "21"
	}, {
		id : "3",
		name : "langsin3",
		email : "langsin@langsin.com",
		sex : "0",
		age : "22"
	}, {
		id : "4",
		name : "langsin4",
		email : "langsin@langsin.com",
		sex : "1",
		age : "23"
	}, {
		id : "5",
		name : "langsin5",
		email : "langsin@langsin.com",
		sex : "0",
		age : "24"
	}]
}



这里将root和fields等都转移到了给予的数据的metaData中。

分享到:
评论
3 楼 hvang1988 2009-07-16  
需要资料可以在google中搜索啊
2 楼 kejiangwei 2009-01-06  
刚学Ext,拜读之后,受益匪浅,谢谢!
1 楼 yiminghe 2008-09-24  
能分析一下

loadMask 与 gridpanel  源码实现么

相关推荐

    ExtJS grid过滤操作

    通过阅读和理解这些代码,你可以更好地理解和应用上述理论知识。 总结来说,ExtJS Grid的过滤操作提供了丰富的功能,使用户能够方便地筛选数据。通过掌握如何创建、应用和清除过滤器,以及如何处理过滤事件,我们...

    extjs grid数据导出excel文件

    在EXTJS中,Grid控件是用于展示大量结构化数据的关键组件,具有丰富的功能和高度可定制性。本文将深入讲解EXTJS Grid如何实现数据导出到Excel文件的功能。 首先,我们要明白EXTJS Grid的数据导出到Excel的过程通常...

    ExtJs动态grid的生成

    本文将深入探讨如何在ExtJS中动态生成Grid,这是一个非常实用的功能,可以适应不断变化的数据需求和用户交互。我们首先从标题"ExtJs动态grid的生成"开始,了解动态生成Grid的基本概念和实现方法。 动态生成Grid意味...

    Extjs4 grid使用例子

    Grid组件是ExtJS中的核心部分,它提供了一个灵活的、可定制的数据展示网格,通常用于显示和操作大量数据。 1. **MVC架构**: Model-View-Controller(MVC)是一种设计模式,常用于大型应用的组织和管理。在ExtJS4...

    Extjs grid 中文排序问题修正

    EXTJS Grid的排序功能是基于其内部的Store对象实现的,Store中的每条记录都有一个对应的sortField和sortDir属性,用于记录当前的排序字段和排序方向。当你点击列头进行排序时,Grid会调用Store的sort方法,根据指定...

    EXTJS grid导出EXCEL文件

    在EXTJS 3.2.0版本中,Grid提供了一个功能,可以将其中的数据导出到Microsoft Excel文件中,方便进一步的数据分析和处理。 "EXTJS grid导出EXCEL文件"这个主题涉及到的主要知识点包括: 1. **EXTJS Grid组件**:...

    Extjs Grid2Grid拖拽

    在ExtJS中,Grid组件是一个非常重要的部分,它用于显示和操作大量的表格数据。"Grid2Grid拖拽"功能是指在两个ExtJS Grid之间通过鼠标拖放操作来移动或复制行数据。这种功能在数据管理、比较和操作场景中非常实用。 ...

    extjs4 对各类型store各种数据的读取 model 前台 等等

    根据提供的文件信息,本文将详细解析ExtJS 4中如何处理不同类型的Store及与之相关的数据操作、模型定义以及前端展示等内容。 ### ExtJS 4中的Store与数据管理 ...希望这些内容能帮助你更好地理解和应用ExtJS框架。

    Extjs动态GRID

    在EXTJS中,动态GRID指的是可以实时调整列宽、列数甚至列结构的网格视图,以适应不同的数据需求和用户界面变化。 1. 动态列创建与删除: EXTJS的Grid Panel支持在运行时动态添加或移除列。这可以通过调用`columns....

    extjs4 ComboBox 点击下拉框 出现grid效果

    在实际项目中,你应该根据需求选择合适的库版本,并通过`ext.js`或`ext-dev.js`引入EXTJS的核心库,然后根据需要引入其他组件,比如ComboBox和Grid。 总结来说,EXTJS4的ComboBox可以通过自定义事件处理和组件嵌套...

    ExtJs Grid选择行

    在ExtJs框架中,Grid组件是一种非常常用的展示数据表格的方式,它提供了丰富的功能,包括数据的排序、分页、过滤以及行选择等。在实际应用中,经常需要根据用户交互来判断Grid中的行是否被选中,以便进行下一步的...

    EXTJS Grid总结例子

    本总结例子将深入探讨EXTJS Grid的核心特性和使用方法,通过源代码分析,帮助开发者更好地理解和应用EXTJS Grid。 一、EXTJS Grid的基本结构 EXTJS Grid由多个部分组成,包括Store(数据存储)、Columns(列配置)...

    Extjs tree and Grid(Buffer Grid,Progress Grid)

    在"Extjs tree and Grid(Buffer Grid,Progress Grid)"这个主题中,我们将深入探讨这两个核心组件以及它们的特定变体——缓冲网格(Buffer Grid)和进度网格(Progress Grid)。 1. **ExtJS Tree** - 树形控件...

    Extjs4下拉菜单ComboBox中用Grid显示通用控件

    - `ComboBox` 是EXTJS中的一个基础组件,它提供了文本输入框和下拉列表的功能。 - 用户可以输入文本,也可以点击下拉箭头查看预定义的选项列表。 - `ComboBox` 的数据通常通过配置 `store` 属性来设置,`store` ...

    ExtJS笔记---Grid实现后台分页

    Grid由Store(数据存储)、Columns(列定义)和View(视图)三部分组成。Store负责管理数据,Columns定义显示的列,View则是数据的视觉呈现。为了实现后台分页,我们主要关注Store的配置。 1. **配置Store**: - `...

    extjs grid

    EXTJS Grid是EXTJS库中的一个核心组件,用于创建数据密集型的表格视图,它在Web应用程序中常用于展示和操作大量结构化数据。EXTJS Grid提供了丰富的功能,包括分页、排序、过滤、编辑等,使得用户可以高效地管理和...

    extjs grid示例代码

    Grid组件在Web应用中广泛使用,因为它提供了强大的数据展示、排序、分页、筛选和编辑功能。以下是对`ExtJS Grid`示例代码的详细解析: 1. **Grid的基本结构** - `Ext.grid.Panel`:这是Grid组件的基础类,它包含了...

    Extjs grid分页1

    ExtJS Grid 分页是Web应用中数据展示的重要组成部分,它允许用户高效地浏览大量数据而无需一次性加载所有记录。在本文中,我们将深入探讨ExtJS Grid的分页功能及其实现方式。 首先,ExtJS Grid是一种强大的...

    ExtJS4.0 分享GridHeaderFilters插件

    在GridPanel中,我们经常需要对列进行筛选以方便用户查找和分析数据。"GridHeaderFilters"插件就是这样一个工具,它允许用户直接在列头中设置筛选条件,提高了数据操作的便利性。 这篇博客“ExtJS4.0 分享Grid...

    ExtJs grid多选时获取选中的所有值

    在Web应用开发中,ExtJs 是一款非常强大的JavaScript框架,它能够帮助开发者快速构建复杂的用户界面。其中,Grid Panel(简称 Grid)是ExtJs中最常用的一个组件之一,用于展示表格数据。在实际业务场景中,经常需要...

Global site tag (gtag.js) - Google Analytics