ExtJS之 Proxy数据代理

2023-11-19

ExtJS之 Proxy数据代理

代理种类截图:image

ExtJS提供的数据代理主要分为两大类:

1.客户端代理 (Ext.data.proxy.Client)

2.服务器代理(Ext.data.proxy.Server)

这两个类 都继承自 Ext.data.proxy.Proxy ,

客户端代理主要包括:Memory   WebStorage   SessionStorage   LocalStorage

服务器端代理包括:  Ajax   Rest  JsonP

Ext.data.proxy.Memory

//this is the model we will be using in the store     
          Ext.define('User', {      
              extend: 'Ext.data.Model',      
              fields: [      
      { name: 'id', type: 'int' },      
      { name: 'name', type: 'string' },      
      { name: 'phone', type: 'string', mapping: 'phoneNumber' }      
  ]      
          });

          //this data does not line up to our model fields - the phone field is called phoneNumber     
          var datas = {      
              users: [      
      {      
          id: 1,      
          name: 'Ed Spencer',      
          phoneNumber: '555 1234'      
      },      
      {      
          id: 2,      
          name: 'Abe Elias',      
          phoneNumber: '666 1234'      
      }      
  ]      
          };


          //创建memory代理      
          var memProxy = new Ext.data.proxy.Memory({

              model: 'User',     
              reader: { root: 'users' },      
              data: datas

          });     
          //读取数据      
          memProxy.read(new Ext.data.Operation(), function (result) {

              var total = result.resultSet.total;     
              alert("数据总条数为:" + total);

          })     

DOM Storage 分为两类, sessionStorage 和 localStorage

sessionStorage: 用于存储与 当前浏览器窗口关联的数据.窗口关闭后,sessionStorage中数据将无法使用

localStorage:      用于长期存储数据.窗口关闭,数据仍然可以访问, 所有浏览器窗口可以共享 数据.

下面看看一个 localStorage的例子

效果:image

Ext.define('Search', {     
                fields: ['id', 'query'],      
                extend: 'Ext.data.Model',      
                proxy: {      
                    type: 'localstorage',      
                    id: 'twitter-Searches'      
                }      
            });

            var store = new Ext.data.Store({     
                model: "Search"      
            });

            //添加数据     
            store.add({ query: 'Sencha Touch' });      
            store.add({ query: 'Ext JS' });      
            //保存数据      
            store.sync();

            //读取数据     
            store.load();

            var msg = [];     
            store.each(function (data) {      
                msg.push(data.get('id') + '-' + data.get('query'));

            })     
            alert(msg.join('\n'));

当 关闭浏览器,从今浏览此页面后,效果图:image

说明,localstorage 是长期存储数据的,即使关闭浏览器,数据仍然存在.

下面还要说明一点:LocalStorage代理如果没有指定id,则会使用 store的id,如果两个都没指点,那么就会抛出异常

Ext.data.proxy.SessionStorage

效果:image

Ext.define('Search', {     
               fields: ['id', 'query'],      
               extend: 'Ext.data.Model',      
               proxy: {      
                   type: 'sessionstorage',      
                   id: 'twitter-Searches'      
               }      
           });

           var store = new Ext.data.Store({     
               model: "Search"      
           });

           //添加数据     
           store.add({ query: 'Sencha Touch' });      
           store.add({ query: 'Ext JS' });      
           //保存数据      
           store.sync();

           //读取数据     
           store.load();

           var msg = [];     
           store.each(function (data) {      
               msg.push(data.get('id') + '-' + data.get('query'));

           })     
           alert(msg.join('\n'));

当关闭浏览器,从新浏览此页面时:image.

里面的数据没有增加,验证了刚才的说法.     

服务器端代理

服务器端代理会访问远程服务器资源,适合于长期保存重要的数据资料.

下面是 分页参数

image

//定义User模型

Ext.define('User', {   
               extend: 'Ext.data.Model',    
               fields: ['id', 'name', 'email']    
           });

            //定义数据代理   
           var proxy = new Ext.data.proxy.Ajax({    
               model: 'User',    
               url: 'Handler.ashx',    
               reader: {    
                   type: 'json',   //jsonReader    
                   root: 'users'    
               }    
           });

           //创建请求参数对象

             var operation = new Ext.data.Operation({

               page: 2,   
               start: 10,    
               limit: 20,    
               action: 'read'   //请求动作

           });

           proxy.doRequest(operation, callback);  //发起请求   
           function callback(operation) { //请求的回调函数    
               //获取服务器返回的原始数据    
               var reText = operation.response.responseText;    
               //获取记录总数    
               var totalRecords = operation.resultSet.totalRecords;    
               //获取记录数组    
               var records = operation.resultSet.records;    
               alert(totalRecords);


           }    
服务器返回的数据:  {users:[{id:'" + id + "',name:'gao'}]} 

排序参数

参数信息:image

只需更改 上面程序的 operation配置即可

var operation = new Ext.data.Operation({

                sorters: [   
                new Ext.util.Sorter({    
                    property: 'id',    
                    direction: 'ASC'  //DESC    
                })    
                ],

                action: 'read'

            });

自定义排序参数:

image

Ext.define('User', {   
               extend: 'Ext.data.Model',    
               fields: ['id', 'name', 'email']    
           });


           var proxy = new Ext.data.proxy.Ajax({    
               model: 'User',    
               url: 'Handler.ashx',    
               reader: {    
                   type: 'json',    
                   root: 'users'    
               },

               sortParam: 'sortParam',  //自定义排序参数名称

               encodeSorters: function (sorters) {//排序参数的数组,返回一个JSON-encodes的字符串

                   var length = sorters.length,   
                   sortArray = [],   //定义参数数组    
                   sorter, i;    
                   for (var i = 0; i < length; i++) {

                       sorter = sorters[i];   
                       sortArray[i] = sorter.property + '#' + sorter.direction;

                   }   
                   return sortArray.join(",");

               }   
           });

           var operation = new Ext.data.Operation({

               sorters: [   
               new Ext.util.Sorter({    
                   property: 'id',    
                   direction: 'ASC'  //DESC    
               }),    
               new Ext.util.Sorter({    
                   property: 'age',    
                   direction: 'DESC'    
               })

               ],

               action: 'read'

           });

           proxy.doRequest(operation, callback);   
           function callback(operation) {    
               //获取服务器返回的原始数据    
               var reText = operation.response.responseText;    
               //获取记录总数    
               var totalRecords = operation.resultSet.totalRecords;    
               //获取记录数组    
               var records = operation.resultSet.records;    
               alert(totalRecords);


           }    

过滤器参数

image

var operation = new Ext.data.Operation({

                filters: [   
              new Ext.util.Filter({

                  property: 'id',   
                  value: '2'    
              })    
              ]    
              ,

                action: 'read'

            });   

自定义过滤器参数 :

暂留

分组参数

image

var operation = new Ext.data.Operation({

                groupers: [

                    new Ext.util.Grouper({  
                   
                    property:'age',   
                    direction:'ASC'   
                    })   
               
                ]   
              ,

                action: 'read'

            });

Ext.data.proxy.Rest实例

image

Ext.regModel('User', {

               fields: ['id', 'name', 'age'],    
               proxy: {

                   type: 'rest',  //使用Ext.data.proxy.Rest代理    
                   url: 'Handler.ashx'     
               }

           });

           var u1 = Ext.ModelManager.create({ name: 'gao', age: 12 }, 'User');    
           u1.save();  //因为没有id所以调用 create方法

           var u2 = Ext.ModelManager.create({ id: 10, name: 'gao2', age: 12 }, 'User');    
           u2.save();   //因为有id,所以 执行update     
           var u3 = Ext.ModelManager.getModel('User');     
           u3.load(100); //调用read方法 ,读取id等于300的数据     
           var u4 = Ext.ModelManager.create({ id: 300, name: 'gao4', age: 11 }, 'User');     
           u4.destroy();  //

Ext.data.proxy.JsonP

暂留

Reader数据读取器

数据读取器的作用就是 将 数据代理 读取到的  原始数据 按照不同的规则进行解析,将解析后的数据

保存到Model模型对象 中,.

extJS主要数据解析器为:

1.Json数据读取器

2.XML数据读取器

3.数组数据读取器

Json读取器:

image

var userdata = {

                "total": 2000,    
                "users": [     
                            {     
                                "id": 22,     
                                "name": "gao",     
                                "orders": [     
                                                {     
                                                    "id": 30,     
                                                    "total": 100     
                                                },     
                                                 {     
                                                     "id": 320,     
                                                     "total": 1002     
                                                 }     
                                           ]

                            }    
                        ]


            }     
            //定义用户模型     
            Ext.regModel('User', {

                fields: ['id', 'name'],    
                hasMany: 'Order'

            });    
            //定义订单模型     
            Ext.regModel("Order", {

                fields: ["id", "total"],    
                belongTo: 'User'  //定义 order和user之间的多对一关系     
            })

            //创建 memory代理    
            var meoProxy = new Ext.data.proxy.Memory({

                model: 'User',    
                reader: {

                    type: 'json',    
                    root: 'users'     
                },     
                data: userdata

            })

            //读取数据    
            meoProxy.read(new Ext.data.Operation(), callBack);     
            function callBack(res) {     
                //获取总数据数     
                var count = res.resultSet.total;     
                //获取第一个用户信息     
                var user = res.resultSet.records[0];     
                //获取该用户的第一个账单信息     
                var order = user.orders().getAt(1);     
                alert("总数据数:" + count + '\n姓名:' + user.get('name') + '\n账单金额:' + order.get('total'));

            }

读取复杂的json数据:

image

代码:

var userdata = {


                "users": [     
                            {     
                                "id": 22,     
                                "name": "gao",     
                                "info": { "id": 22, "name": "gaoyu" }

                            }    
                        ]


            }     
            //定义用户模型     
            Ext.regModel('User', {

                fields: ['id', 'name']

            });

            //创建 memory代理    
            var meoProxy = new Ext.data.proxy.Memory({

                model: 'User',    
                reader: {

                    type: 'json',    
                    root: 'users',     
                    record: 'info'      //定位有效数据的位置     
                },     
                data: userdata

            })

            //读取数据    
            meoProxy.read(new Ext.data.Operation(), callBack);     
            function callBack(res) {     
                //获取第一个用户信息     
                var dd = res.resultSet.records[0];     
                alert('姓名:' + dd.get('name'));

            }

数组读取器

image


//定义用户模型     
Ext.regModel('User', {

    fields: ['id', 'name'],    
    proxy: //定义代理     
    {     
        type: 'ajax',     
        url: 'Handler.ashx',     
        reader: {     
            type: 'array'   //读取器类型为 数组     
        }     
    }

});    
var user = Ext.ModelManager.getModel('User');     
//通过代理读取数据     
user.load(1, {

    success: function (res) {

        alert(res.get('id'));    
    }     
})

服务器返回数据:  [[1,\'nill\']]

Writer数据写入器

主要用于将 数据代理 提交到服务端 的数据进行编码,.

主要写入器,有  JSON写入器和XML写入器

Json写入器使用:

image

//定义用户模型    
        Ext.regModel('User', {

            fields: ['id', 'name'],    
            proxy: //定义代理     
            {     
            type: 'ajax',     
            url: 'Handler.ashx',     
            writer: {     
                type: 'json'   //写入为json格式     
            }     
        }

    });    
    var user = Ext.ModelMgr.create({ id: 12, name: 'gao' }, 'User');     
    user.save({     
        success: function () { alert('save succeed!') },     
        failure: function () { alert('save failed!') }

    })

XML写入器

image

//定义用户模型    
           Ext.regModel('User', {

               fields: ['id', 'name'],    
               proxy: //定义代理     
               {     
               type: 'ajax',     
               url: 'Handler.ashx',     
               writer: {     
                   type: 'xml'   //写入为json格式     
               }     
           }

       });    
       var user = Ext.ModelMgr.create({ id: 12, name: 'gao' }, 'User');     
       user.save({     
           success: function () { alert('save succeed!') },     
           failure: function () { alert('save failed!') }

       })

遍历store

image

//定义用户模型    
          Ext.regModel('User', {

              fields: ['id', 'name'],    
              proxy: //定义代理     
              {     
              type: 'memory'


          }     
      })     
      var store = new Ext.data.Store({     
          autoLoad: true,     
          data: [{ id: 12, name: 'ss' }, { id: 11, name: 'zz'}],     
          model: 'User'


      })     
      //遍历store中元素     
      var msg = ['遍历:'];     
      store.each(function (res) {

          msg.push('id=' + res.get('id') + 'name=' + res.get('name'));    
      })     
      alert(msg.join('\n'));

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ExtJS之 Proxy数据代理 的相关文章

  • 如何绑定国家/地区更改国际电话输入

    我使用国家代码插件名称国际电话输入 js https intl tel input com 这是我的演示页面 在页面中我想清空手机 输入字段 当国家选择改变时 div class demo h3 Demo h3 div class iti
  • Flot 中轴的逗号分隔数字

    有没有办法让 Flot 使轴编号以逗号分隔 例如 用 1 000 000 代替 1000000 您可以通过使用轴的tickFormatter 属性来做到这一点 xaxis tickFormatter function val axis in
  • 如何在 Rollup 中配置从多个输入文件仅生成单个输出文件?

    配置Rollupjs生成库时 如果输入是由多个javascript文件组成的数组 我们如何才能将这些输入生成为一个输出 js 文件呢 export const lgService input src app services livegiv
  • 同位素 Jquery 插件布局问题

    我正在尝试在此站点上设置同位素 它需要处理布局 并且我需要能够将项目附加到容器中 问题是它似乎没有正确初始化图像 这是我初始化它的方法 document ready function var container container cont
  • Extjs中始终显示Slider的提示文本

    在 Extjs 4 1 1a 中 如何保持tip text滑块始终可见 目前 tip text每当用户拖动滑块栏时就可见 我搜索了docs http docs sencha com ext js 4 0 api Ext slider Sin
  • 如何在D3中导入json数据?

    如何在D3中导入json文件 I did d3 json temp json 但是我如何在进一步的代码中访问这个数据集呢 到目前为止我已经尝试过 var data d3 json temp json 但使用 data data 在其余代码中
  • 如何在 HTML/CSS 中进行制表符停止

    我想用 HTML 呈现一些文本的格式 这是一张图片 请注意带有项目符号点和段落编号的灰线 项目符号应位于页面中央 并且数字应正确对齐 我一直在尝试思考如何在 HTML 中做到这一点 但一无所获 您将如何捕获这种格式 您可以使用 before
  • 如何将 PHP 变量获取到 AJAX?

    我认为我没有在单独的 PHP 和 AJAX 文件之间以正确的方式传递变量 我正在通过触发第二个条件来调试它 status info 在我的 PHP 文件中 现在 status出现为 未定义 alert data status 注册进程 ph
  • -moz-background-clip:text 在 Firefox 中不起作用

    我正在尝试用图像填充 h1 标签中的文本内容 根据我的理解 我在 html 中执行以下操作 div class image clip h1 MY WONDERFULL TEXT h1 div 并在 css 文件中 image clip ba
  • Ember 未在生产环境中加载某些图像

    我有一个 Ember cli 1 13 应用程序 它在公共目录中存储了很多图像 现在 它将正确加载除特定组件中的图像之外的所有图像 该组件的调用方式如下 list item url list url name List Name price
  • JavaScript 中 == 和 === 的区别[重复]

    这个问题在这里已经有答案了 有什么区别 and 在 JavaScript 中 我也见过 and 运营商 还有更多这样的运营商吗 看看这里 http longgoldenears blogspot com 2007 09 triple equ
  • 删除鼠标悬停时的 Vue 自定义过滤器

    我想使用 VueJS 2 删除鼠标悬停时的截断过滤器 这是模板中的过滤器 div class eng word english truncate div 这是过滤器本身 filters truncate function value let
  • 尝试利用?

    我看到我的 nopCommerce 网站记录了以下搜索 ADw script AD4 alert 202 ADw script AD4 我有点好奇他们想要完成什么 我搜索了一下 似乎是ADw script AD4 以 UTF7 编码为
  • (jQuery) 在 cookie 中单击时保存复选框状态

    关于此功能有很多主题 但我似乎无法让它工作 我在谷歌上搜索了这个具体案例 有一堆链接让我来到这里 但奇怪的是我似乎无法让它们工作 我所做的唯一工作如下 http dl dropbox com u 2238080 a old z htm ht
  • 添加 X 轴标题会导致 Uncaught RangeError:minimumFractionDigits value is out of range in Chart.js

    我正在尝试向 Chart js 图表的 X 轴添加标题 但是当我将标题属性放在 x 轴上时 出现错误 Uncaught RangeError minimumFractionDigits value is out of range 但它并没有
  • Javascript 仅在 Chrome 中打开开发者工具后才起作用

    我和这里有同样的问题 为什么JavaScript只有在IE中打开开发者工具一次后才能工作 https stackoverflow com questions 7742781 why javascript only works after o
  • html5 canvas贝塞尔曲线获取所有点

    我喜欢从贝塞尔曲线中得到一些点 我发现 在javascript中查找三次贝塞尔曲线的所有点 https stackoverflow com questions 15397596 find all the points of a cubic
  • 在 WCF 服务上的 AJAX 发出 REST 请求期间启用 CORS 中的 OPTIONS 方法

    我花了7个小时绞尽脑汁想弄清楚这个问题 我在整个网络上进行了搜索 但没有运气 我有一个 Angular 应用程序正在向 WCF 命令行托管服务应用程序发出请求 我设法通过使用这两个类来实现 CORS public class CustomH
  • 反应本机中的“未知命名模块”错误

    我正在使用 React Native 创建一个应用程序 但某些导入会引发标题中的错误 Unknown named module 两个包都会发生这种情况 react native material design and react nativ
  • 如何提交表单 onkeyup 操作

    我正在尝试保存表格onkeyup行动 我是 jQuery 新手 这可能吗 我很感激任何帮助 编辑1 保存表单意味着保存到服务器 有没有办法增加0 2秒的延迟 此代码将在 keyup 上提交您的表单 element bind keyup fu

随机推荐

  • Cocos Creator 如何处理物理和碰撞检测?

    Cocos Creator 如何处理物理和碰撞检测 cocos creator 版本 v3 6 1 Cocos Creator 3 x 实现碰撞检测 Cocos Creator 通过使用物理引擎来处理物理和碰撞检测 Cocos Creato
  • 线特征的LSD提取算法

    线特征的LSD提取算法 线段检测器算法 算法流程 大多数图像中都存在直线特征 是视觉感知 描述外部环境的重要特征信息 直线是一种大尺度的特征 在水面环境中具有更为理想的适用性 线特征具有光照和视角不变性特点 表现更为稳定 有效 因此将点 线
  • redis--11.2--操作--管道

    redis 11 2 操作 管道 1 介绍 将多个命令一起通过网络发送 返回多个值
  • Knowledge Distillation & Student-Teacher Learning for Visual Intelligence: A Review & New Outlooks

    论文地址 http arxiv org abs 2004 05937 github地址 无 这是篇关于知识蒸馏的综述文章 知识蒸馏被认为是用于模型压缩的非常有效的一种方式 本文作者从模型压缩和知识迁移两个应用场景概述了近年来对知识蒸馏的研究
  • kaggle数据集_图像分类:来自 13 个 Kaggle 项目的经验总结

    点击上方公众号 可快速关注 转自 机器学习实验室 任何领域的成功都可以归结为一套小规则和基本原则 当它们结合在一起时会产生伟大的结果 机器学习和图像分类也不例外 工程师们可以通过参加像Kaggle这样的竞赛来展示最佳实践 在这篇文章中 我将
  • VMware虚拟机崩溃的解决方法(.vmx损坏,其他文件完好)

    使用虚拟机的朋友想必都或多或少遇到过虚拟机崩溃 无法开启的问题吧 这确实是虚拟机存在的一个严重问题 例如突然断电 或者虚拟机非正常关机等等 很多因素都能造成虚拟机的异常损坏 本文就针对其中的一种常见问题提供相关解决办法 如有不当之处 望不吝
  • c++直角坐标系与极坐标系的转换_平面向量的奇技淫巧——斜坐标系的一系列低级研究...

    事先说明 笔者初三 如在叙述中有不严谨的地方 还请诸位指出 自当感激不尽 一 什么是斜坐标系 众所周知 我们目前平面中使用相当广的坐标系是笛卡尔发明的平面直角坐标系 然而 笛卡尔真的只使用了这一种坐标系吗 显然不是的 事实上 笛卡尔最先使用
  • Odoo免费开源ERP订单锁货的应用实施技巧分享

    Odoo是世界排名第一的免费开源ERP 其应用市场上有3万多个功能插件可供下载使用 几乎涵盖各行各业的企业业务管理流程 包括库存管理 销售管理 采购管理 制造管理 维修保养 网站电商 市场营销 项目管理 HR 财务 PLM等等 并且源码交付
  • 服务器备案的网站名称怎么填写,公安备案网站名称怎么写?

    最近很多新老用户接到西安网警打来电话让进行公安网安备案 要求通过全国互联网安全管理服务平台进行公安联网备案 客户俗称 公安备案网站名称怎么写 依据 计算机信息网络国际联网安全保护管理办法 相关规定 各网站在工信部备案成功后 需在网站开通之日
  • 迪杰斯特拉算法(Dijkstra)-Java实现

    迪杰斯特拉算法也是求两点之间最短路径的算法 它的思想和普利姆算法有点相似 不断通过已找到点集合和未找到点之间的集合之间的最短路径 这个算法需要用到三个数组 一个是存储结点是否已经访问 一个是结点到起始点的最短距离 还有一个是结点到起始点第一
  • Java实现简单版SVM

    Java实现简单版SVM 最近的图像分类工作要用到latent svm 为了更加深入了解svm 自己动手实现一个简单版的 之所以说是简单版 因为没有用到拉格朗日 对偶 核函数等等 而是用最简单的梯度下降法求解 其中的数学原理我参考了http
  • 解决Adobe Flash Player已不再受支持的问题

    1 问题展示 我们在访问某些网站时 可能会出现Adobe Flash Player已不再受支持的问题 具体如下图所示 这会对我们的日常生活需求产生极大的不便 因此迫切需要一个能够解决此问题的方法 其实很简单 具体操作请看下面的步骤 2 下载
  • 移动端+PC端图片预览+手势缩放等功能合集

    话不多说 直接上代码 大家可按需求功能复制使用 window onload function 点击图片进入预览 var Dom document querySelector preview Dom onclick function var
  • 接口如何实现多态

    抽象类是用来继承的 不能被实例化 抽象类里可以有成员变量 接口中没有 1 抽象类里的抽象方法 只有在子类实现了才能使用 2 抽象类里的普通方法 可被子类调用 3 接口里的方法 都被默认修饰为public abstract类型 4 接口里的变
  • 记录1年免费亚马逊AWS云服务器申请方法过程及使用技巧

    转载 http www itbulu com free aws html 早年我们才开始学习网站建设的时候 会看到且也会寻找免费主机商 主要原因是那时候提供免费主机的商家还是比较靠谱的 而且那时候主机商并不是很多且成本也比较大 我们深知听到
  • linux上层app调用驱动底层的过程详解

    APP应用程序 gt 应用框架层 gt 硬件抽象层 gt 硬件驱动程序 一 硬件驱动层 进入kernel drivers文件夹中 创建一文件夹 放入驱动程序 包括头文件 C文件 Makefile Kconfig 同时对drivers下的Ma
  • 滚动屏幕或缩放屏幕,使用节流

    场景 滚动屏幕 onScroll 缩放屏幕 resize 如果需要统计用户滚动屏幕或缩放屏幕的行为作出相应的网页反应 容易导致网络的阻塞 mounted window addEventListener resize this throttl
  • 基于聚类的异常值检测算法依据及python实现

    假设数据集D被聚类算法划分到k个类C C1 C2 CK 对象p 的离群因子of3 p 定义为 与所有类间距的加权平均值 其中 D 为样本数量 Cj 为第j个聚类群体样本数量 d p cj 为样本p与第j个聚类中心的距离 其中cj表示第j个聚
  • LeetCode·每日一题·1851. 包含每个查询的最小区间·优先队列(小顶堆)

    题目 示例 思路 离线查询 输入的结果数组queries 是无序的 如果我们按照输入的queries 本身的顺序逐个查看 时间复杂度会比较高 于是 我们将queries 数组按照数值大小 由小到大逐个查询 这种方法称之为离线查询 位运算 离
  • ExtJS之 Proxy数据代理

    ExtJS之 Proxy数据代理 代理种类截图 ExtJS提供的数据代理主要分为两大类 1 客户端代理 Ext data proxy Client 2 服务器代理 Ext data proxy Server 这两个类 都继承自 Ext da