博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ext Js简单Data Store创建及使用
阅读量:6171 次
发布时间:2019-06-21

本文共 11352 字,大约阅读时间需要 37 分钟。

  不知道大家是如何学习一门新语言、一门技术或某一新鲜事物的?可能还是自己在一开始学习编程时常听到的那样,找一本基础的书看看,把书上的每一个示例都敲一遍,把书上的每一段代码都理顺。现在忙碌生活中又是如何接触学习这些新鲜事物的呢?当然,我们的水平永远不会停留在初级,也不会像最初学习编程那样的笨拙,提出一些很没有技术含量的问题,我们会随着对技术的学习和使用会有一种融会贯通的感觉。哦,原来是这样处理的,效果很炫,处理起来并不是很难,学习理解能力也提高了,学习起来也快了,很快就能上手(简单会使用,但是还不很深入)。

  对于一些新事物的学习,可能这是我们的通常所想所做的,就是先根据简单示例,模仿它实现的效果;然后修修改改变通一下,简单的灵活使用;然后在平时的学习、工作中大量使用,渐渐变得更熟练,理解更加到位,研究更深入;然后在使用该技术创新于不同应用,去实现某种想要的效果。我们就是由模仿,到熟练,到灵活运用,到广泛应用,到提取造轮子,到形成体系结构。(可能还会考虑的是有没有学习资料,有没有开放的比较系统的学习资源。鼓励大家多多写博客,把对技术的学习、理解,生活的感悟,整理成文章,对自己澄清思维,也能帮助到他人。当我们在享受他人帮助的同时,希望也能去帮助更多人。受益于开源,推崇开源。)

扯远了,今天分享的是对于Ext Js的data的相关操作,主要是对Ext.data.Store的使用:(store常需要proxy\reader)

1.Ext.data.Connection的创建使用

//Ext.data.Connectionfunction storeConnection() {    var conn = new Ext.data.Connection({        method: 'GET', //请求方法        timeout: 300, //链接超时时间        url: '01-01.txt', //请求访问网址        autoAbort: false, //是否自动断开                        disableCaching: false, //是否默认禁用缓存        extraParams: { name: 'name' }, //请求的额外参数        defaultHeaders: { referer: 'http://localhost:8080'}//请求默认首部信息    });    conn.request({        success: function (response) { Ext.Msg.alert('InfoMessage', response.responseText); },        failure: function (response) { Ext.Msg.alert('WarnInfo', 'This Request Is Failure!'); }    });    //request的参数:url\params\method\callback\success\failure\scope\form\isUpload\headers\xmlData\disableCaching    //参数:请求URL\传递参数\请求方法(GET\POST)\回调函数(无论成败)\成功回调\失败回调\回调作用域\绑定的表单\是否支持文件上传\请求首部信息}

2.Ext.data.Record的创建使用(记录的创建使用)

//Ext.data.Recordfunction storeRecord() {    var personRecord = Ext.data.Record.create([//创建一个自定义的Record类型结构            {name: 'name1', type: 'string' },            { name: 'sex', type: 'int' }            ]);    var boy1 = new personRecord({ name: 'boy1', sex: 0 }); //创建实例    var boy2 = new personRecord({ name: 'boy2', sex: 0 });    //调用实例属性    alert(boy1.data.name); //读取操作    alert(boy2.data['name'] + ";" + boy2.get('sex'));    boy1.set('name', 'newName'); //写入操作    //Record属性数据被修改后,数据原值放在modified对象中,可以执行如下操作:    //commit()\reject()\getChanges(),表示提交(删除modified数据)\撤销(删除modified数据)\获取修改部分    //isModified(),判断是否被修改;copy(),复制实例,如:var boyCopy=boy1.copy();}

3.Ext.data.Store的创建使用(小型数据集)

//Ext.data.Storefunction storeTest() {    var personRecord = Ext.data.Record.create([{ name: 'name1', type: 'string' }, { name: 'sex', type: 'int'}]);    var data = [['boy1', 0], ['boy2', 0]];    var myStore = new Ext.data.Store({        proxy: new Ext.data.MemoryProxy(data),        reader: new Ext.data.ArrayReader({}, personRecord),        sortInfo: { field: 'name', direction: 'DESC' }        //根据排序字段排序,也可以store.setDefaultSort('name','DESC');或store.sort('name','DESC');        //调用排序信息,getSortState()函数,返回JSON数据:{ field: 'name', direction: 'DESC' }    });    myStore.load();    return myStore;}

4.读取store中的数据

//从store中获取数据function storeData() {    var store = new Ext.data.Store();    store = storeTest(); //获取store对象    store.getAt(0).get('name'); //获取数据    for (var i = 0; i < store.getCount(); i++) {
//遍历store中的记录 var record = store.getAt(i); //获取第i条记录 alert(record.get('name')); } //遍历集合,处理数据 store.each(function (record) { alert(record.get('name')); }); //也可以使用getRange()函数连续获取多个record var records = store.getRange(0, 1); for (var i = 0; i < records.length; i++) { var record = records[i]; alert(record.get('name')); } //也可以通过getById来获取对象 store.getById(1001).get('name'); //也可以使用find()和findBy()来进行搜索, //find(string property,string/RegExp value,[Number startIndex],[Boolean anyMatch],[Boolean caseSensitive]) //5参数:搜索字段名,匹配字符串或正则表达式,从第几行开始索引,为true不必从头开始匹配,为true区分大小写 var index = store.find('name', 'g'); alert(store.getAt(index).get('name')); //findBy(Function fn,[Object scope],[Number startIndex]) //fn返回true,查找成功,停止遍历返回行号;返回false,查找失败,继续遍历 var index = store.findBy(function (record, id) { return record.get('name') == 'boy1' && record.get('sex') == 1; }); alert(store.getAt(index).get('name')); //也可以使用query()和queryBy()返回集合对象,用法一样。 alert(store.query('name', 'boy')); alert(store.queryBy(function (record) { return record.get('name') == 'boy1' && record.get('sex') == 0; }));}

5.更新store中的数据

//更新store中的数据function updateStore() {    var store = new Ext.data.Store();    store = storeTest(); //获取store对象    //add,添加一条记录或一组记录数组    store.add(new personRecord({ name: 'other', sex: 0 })); //添加一个record实例    store.add([new personRecord({ name: 'other1', sex: 1 }), new personRecord({ name: 'other2', sex: 0 })]); //添加record数组    //addSorted,添加数据后立即更新数据,根据原来的排序进行重排,把数据显示在对应的位子上    store.addSorted(new personRecord({ name: 'other3', sex: 0 }));    //insert,在某个位子处插入一条记录或一组数据记录,后面的数据自动后排    store.insert(3, new personRecord({ name: 'other4', sex: 0 }));    store.insert(3, [new personRecord({ name: 'other5', sex: 0 }), new personRecord({ name: 'other6', sex: 1 })]);    //remove,删除记录;removeAll,清空所有数据    store.remove(store.getAt(0)); //删除指定记录    store.removeAll(); //清空所有数据    //store没有修改记录的函数,需要取出record,进行修改;    //然后在提交修改(commitChanges())或撤销修改(rejectChanges())    store.getAt(0).set('name', 'newName');    //修改完毕,通过getModifiedRecords()获取修改过的record数组,    //可以设置参数pruneModifiedRecords为true,会清空所有修改(可以在执行删除或reload时设置)}

6.从store的数据加载

//store的数据加载function loadData() {    var store = new Ext.data.Store();    store = storeTest(); //获取store对象    store.load({
//load函数一般只执行一次,reload()重新加载时,自动读取load设置的参数 params: { start: 0, limit: 20 }, //records,获取的数据;options,load()时传递的参数;success是否成功 callback: function (records, options, success) { Ext.Msg.alert('Info', '加载完毕'); }, scope: store, add: true//设置为true,load()得到的数据会添加到原来store数据的尾部,否则先清除之前的数据,将得到的数据添加到store中 }); //如果需要固定传递的参数,可以使用baseParams参数执行,作为JSON对象里面的数据发送到后台,如: store.baseParams.start = 0; store.baseParams.limit = 10; //对于store加载的数据,不需要全显示的,可以使用filter和filterBy对store的数据进行过滤,只显示符合条件的数据 //filter(string filed,string/RegExp value,[Boolean anyMatch],[Boolean caseSensitive])和find\findBy的用法类似 store.filter('name', 'boy'); store.filterBy(function (record) { return record.get('name') == 'boy1' && record.get('sex') == 1; }); store.clearFilter(); //取消过滤,显示所有数据 store.isFiltered(); //判断store上是否设置过滤器}

7.store的其他操作

function storeOthers() {    var store = new Ext.data.Store();    store = storeTest(); //获取store对象    //collect(string dataIndex,[Boolean allowNull],[Boolean bypassFilter]),返回一个Array数组    //参数:指定dataIndex列数据;bypassFilter为true时则忽略查询条件,显示所有数据;    //allowNull,为true返回结果会包含null\undefined\空字符串的数据,否则会被过滤掉;    alert(store.collect('name')); //获取所有name列的值    //获取总记录数    alert(store.getCount()); //也是获取数据总数    alert(store.getTotalCount()); //用于翻页时从后台传递过来的数据总数    //获取记录行号(根据记录\记录id)    alert(store.indexOf(store.getAt(1)));    alert(store.indexOfId(1001));    //数据附加(追加)    var data = []; //将data数据附加原数据后,否则整体刷新    store.loadData(data, true);    //求和计算(Sum(property,start,end),计算某一列从start到end的总和)    alert(store.sum('sex')); //省略参数,计算该列全部数据}

8.Proxy的创建使用(Proxy包括:MemoryProxy和HttpProxy)

//代理创建使用function proxyTest() {    //MemoryProxy:从内存,从JS对象读取JSON\XML格式的数据    var proxyMM = new Ext.data.MemoryProxy([            ['id1', 'name1', 'descn1'],            ['id2', 'name2', 'descn2']            ]);    //HttpProxy:使用HTTPY协议,通过AJAX从后台取数据    //其返回数据格式:[['id1','name1'],['id2','name2']]    //这里的HttpProxy不支持跨域处理,需要的话参见ScriptTagProxy    var proxyHttp = new Ext.data.HttpProxy({ url: 'Test.aspx' });    //ScriptTagProxy测试,跨域处理    var proxyTag = new Ext.data.ScriptTagProxy({ url: 'Test.aspx' });    //后台处理:    //string str=request.getParameter("callback");//回调函数的方法名};

9.Ext.data.ArrayReader的创建使用(Reader包括:ArrayReader\JsonReader\XmlReader)

//Ext.data.ArrayReaderfunction testArrayReader() {    var data = [['id1', 'name1'], ['id2', 'name2']]; //数据格式    var reader = new Ext.data.ArrayReader({ id: 1 }, [//ArrayReader不支持分页            {name: 'name', mapping: 1 }, //可以使用mapping指定对应列号            {name: 'id', mapping: 0}//如果字段的顺序和输出一致不需指定mapping            ]);}

10.Ext.data.JsonReader的创建使用(在对于嵌套内容的显示控制很不错)

//JsonReaderfunction testJsonReader() {    var data = {
//数据格式 id: 0, totalProperty: 2, //totalProperty为记录总数, successProperty: true, //successProperty为调用是否成功,在不希望JSON数据处理的,设置为false root: [{ id: 'id1', name: 'name1' }, { id: 'id2', name: 'name2'}] }; var reader = new Ext.data.JsonReader({ id: 'id', root: 'root', totalProperty: 'totalProperty', successProperty: 'successProperty' }, [ { name: 'id', mapping: 'id' }, //mapping数据显示格式一致可以不用,如需改变修改即可 {name: 'name', mapping: 'name' } ]); var data1 = {
//嵌套的内部属性映射需要显示的内容 id: 0, totalCount: 2, successState: true, indata: [ { id: 'id1', name: 'name1', person: { id: 1, name: 'man', sex: 'male'} }, { id: 'id2', name: 'name2', person: { id: 2, name: 'woman', sex: 'female'} } ] }; var jsonReader = new Ext.data.JsonReader({ id: 'id', root: 'indata', totalProperty: 'totalCount', successProperty: 'successState' }, [ 'id', 'name', //mapping根据嵌套的内部属性映射需要显示的内容 {name: 'person_name', mapping: 'person.name' }, { name: 'person_sex', mapping: 'person.sex' } ]);}

11.Ext.data.XmlReader的创建使用

//XMLReaderfunction testXMLReader() {    //其数据格式参见:XMLData.xml    var reader = new Ext.data.XmlReader({        id: 'id',        success: 'success',        totalRecords: 'totalRecords', //数据记录总数        record: 'record'//标签为需要显示的数据    },            ['id', 'name', 'descn']            );}//JS拼接数据function testJSXmlReader() {    //将XML数据处理为js的data数据格式    var data = "
" + "
" + "
1
" + "
2
" + "
true
" + "
" + "
1
" + "
name1
" + "
descn1
" + "
" + "
" + "
2
" + "
name2
" + "
descn2
" + "
" + "
"; 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({ id: 'id', success: 'success', totalRecords: 'totalRecords', record: 'record' }, ['id', 'name', 'descn']); var ds = new Ext.data.Store({ proxy: proxy, reader: reader });}

12.常用Store组合(SimpleStore和JsonStore)

//Store组合function store() {    //SimpleStore=Store+MemoryProxy+ArrayReader    //简化读取本地数组    var simpleStore = new Ext.data.SimpleStore({        data: [                        ['id1', 'name1', 'descn1'],                        ['id2', 'name2', 'descn2']                       ],        fields: ['id', 'name', 'descn']    });    //JsonStore=Store+HttpProxy+JosnReader    //从后台读取JSON数据简单方法    var jsonStore = new Ext.data.JsonStore({        url: 'Test.aspx',        root: 'root',        fields: ['id', 'name', 'descn']    });}

 

转载地址:http://iovba.baihongyu.com/

你可能感兴趣的文章
硬件线程和软件线程的区别
查看>>
时间戳前
查看>>
11月22日晚上海交大《PMI敏捷实践指南解读》线上沙龙欢迎你的参与!
查看>>
初识 Linux (VMware、CentOS 7)
查看>>
使用SpringMVC完成文件上传
查看>>
mysql Load Data InFile 的用法
查看>>
Go new vs make
查看>>
【云宏大讲坛】超融合,融合的不仅是基础架构
查看>>
pytnon入门的一些小实例
查看>>
ubuntu下的dock工具
查看>>
饿了么被上海市市场监督局予以警告处分
查看>>
Java项目读取配置文件时,找不到指定的文件???
查看>>
lua/luajit and tcc
查看>>
前端安全即JS代码安全,前端源码安全探讨!
查看>>
如何快速实现异地不同网络打印机共享
查看>>
openinstall免费服务对App推广有哪些作用?
查看>>
基于Docker的微服务CI CD流水线
查看>>
学好SEO需要掌握哪些知识要点?
查看>>
JetBrains GoLand macv2019.1.2中文版如何换成无牵引模式?
查看>>
电气火灾监控系统工作原理
查看>>