• Ext Js简单Data Store创建及使用


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

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

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

    //Ext.data.Connection
    function 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.Record
    function 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.Store
    function 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.ArrayReader
    function 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的创建使用(在对于嵌套内容的显示控制很不错)

    //JsonReader
    function 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的创建使用

    //XMLReader
    function 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 = "<?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({
            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']
        });
    }
  • 相关阅读:
    《贝叶斯优化: 一种更好的超参数调优方式》
    《从Google Visor到Microsoft NNI再到Advisor调参服务接口发展史》
    《归一化激活层的进化:谷歌Quoc Le等人利用AutoML 技术发现新型ML模块》
    《通用视觉 & NAS》
    《Object Detection-IOU Net笔记》
    《Detectron2之ROIAlign》
    《IoUNet(6)_源码_RoIAlign(1)》
    聊天机器人资源合集:项目,语聊,论文,教程。
    一个使用 Python 的人工智能聊天机器人框架
    【TensorFlow 官网 可以直接访问】让中国开发者更容易地使用TensorFlow打造人工智能应用
  • 原文地址:https://www.cnblogs.com/SanMaoSpace/p/2893352.html
Copyright © 2020-2023  润新知