zoukankan      html  css  js  c++  java
  • ExtJs的数据代理proxy

    ExtJs的数据代理proxy

     

    数据代理proxy是进行数据读写的主要途径,通过代理操作数据进行CRUD ---增删改查

    每一步操作全会得到唯一的Ext.data.Operation实例他包含了所有的请求参数

    数据代理proxy目录结构

    Ext.data.proxy.Proxy 代理类的根类(他分为客户端(Client)代理和服务器代理(Server))

           Ext.data.proxy.Client客户端代理

                  Ext.data.proxy.Memory 普通的内存代理 ----[重点]

                  Ext.data.proxy.WebStorage浏览器客户端存储代理

                         Ext.data.proxy.SessionStorage浏览器级别代理----[重点]  打开新的浏览器后不记录信息session级别

                         Ext.data.proxy.LocalStorage本地化的级别代理(不能夸浏览器)----[重点] 打开新的浏览器后记录原来信息cookie级别

           Ext.data.proxy.Server服务器端代理

                  Ext.data.proxy.Ajax 异步加载的方式----[重点]

                         Ext.data.proxy.Rest一种特使的Ajax--[知道]

                  Ext.data.proxy.JsonP 跨域交互的代理----[重点] 跨域是有严重的安全隐患的 extjs的跨域也是需要服务器端坐相应的配合

    1.     普通代理 Memory

    [javascript] view plaincopy
    1.  (function(){  
    2.      Ext.onReady(function(){  
    3.         //定义user的model类  
    4.         Ext.regModel("user",{  
    5.             fields:[  
    6.                     {name:"name",type:"string"},  
    7.                     {name:"age",type:"int"}  
    8.                    ]  
    9.         });  
    10.         //不用create方法我们直接用proxy来创建对象数据  
    11.         var userdata=[  
    12.                   {name:"hanhan313",age:23},  
    13.                   {name:"ecit",age:2}  
    14.                 ];  
    15.         var memoryProxy=Ext.create("Ext.data.proxy.Memory",{  
    16.             data:userdata,  
    17.             model:"user"  
    18.         });  
    19.         //每一步操作全会得到唯一的Ext.data.Operation实例他包含了所有的请求参数  
    20.         //添加数据  
    21.         userdata.push({name:'newuspcat.com',age:1});  
    22.         //update  
    23.         memoryProxy.update(new Ext.data.Operation({  
    24.             action:'update',   //指明操作的类型为更新  
    25.             data:userdata  
    26.         }),function(result){},this);  
    27.         //遍历  
    28.         memoryProxy.read(new Ext.data.Operation(),function(result){  
    29.             var datas = result.resultSet.records;  
    30.             Ext.Array.each(datas,function(model){  
    31.                 alert(model.get('name'));  
    32.             });  
    33.         });  
    34.      });  
    35. })();  

    结果:


    2.     浏览器级别代理SessionStorage

    [javascript] view plaincopy
    1. //Ext.data.proxy.SessionStorage浏览器级别代理----[重点]   打开新的浏览器后不记录信息session级别  
    2. (function(){  
    3.    Ext.onReady(function(){  
    4.       //定义user的model类  
    5.         Ext.regModel("user",{  
    6.             fields:[  
    7.                     {name:"name",type:"string"}  
    8.                    ],  
    9.             proxy:{  
    10.                 type:"sessionstorage", //代理的方式  
    11.                 id:"localid"           //唯一标示符id  
    12.             }  
    13.         });  
    14.        //使用store初始化数据  
    15.        var store=new Ext.data.Store({  
    16.            //数据模版  
    17.            model:"user"  
    18.        });  
    19.         //添加数据  
    20.         store.add({name:"hanhan313"});  
    21.         store.sync();  //保存数据  
    22.         store.load();  //加载数据  
    23.         var meg=[];  
    24.         store.each(function(rec){  
    25.             meg.push(rec.get("name"));  
    26.         });  
    27.         alert(meg.join(" "));  
    28.    });  
    29. })();  

    如果不关闭浏览器多次刷新的结果:


    但是关闭浏览器后在浏览结果:


    说明是以session的形式保存的

    3.     本地化的级别代理LocalStorage

    [javascript] view plaincopy
    1. //Ext.data.proxy.LocalStorage本地化的级别代理(不能夸浏览器)----[重点]  打开新的浏览器后记录原来信息  
    2. (function(){  
    3.    Ext.onReady(function(){  
    4.       //定义user的model类  
    5.         Ext.regModel("user",{  
    6.             fields:[  
    7.                     {name:"name",type:"string"}  
    8.                    ],  
    9.             proxy:{  
    10.                 type:"localstorage",  
    11.                 id:"localid"  
    12.             }  
    13.         });  
    14.        //使用store初始化数据  
    15.        var store=new Ext.data.Store({  
    16.            //数据模版  
    17.            model:"user"  
    18.        });  
    19.         //添加数据  
    20.         store.add({name:"hanhan"});  
    21.         store.sync();  //保存数据  
    22.         store.load();  //加载数据  
    23.         var meg=[];  
    24.         store.each(function(rec){  
    25.             meg.push(rec.get("name"));  
    26.         });  
    27.         alert(meg.join(" "));  
    28.    });  
    29. })();  

    结果:


     

    当关闭浏览器后再次打开访问结果会累加,相当于是以cookie的形式保存的

    4.     异步加载的方式Ajax

    [javascript] view plaincopy
    1. (function(){  
    2.     Ext.onReady(function(){  
    3.         Ext.regModel("person",{  
    4.             fields:[  
    5.                 {name:'name',type:'string'}  
    6.             ]  
    7.         });  
    8.         //Ext.data.proxy.Ajax 异步加载的方式----  
    9.         var ajaxProxy = new Ext.data.proxy.Ajax({  
    10.             url:'index.jsp',  
    11.             model:'person',           //读取模型  
    12.             reader:'json',               
    13.             limitParam : 'indexLimit'  
    14.         });  
    15.         //代理发送请求  
    16.         ajaxProxy.doRequest(new Ext.data.Operation({  
    17.                 action:'read',  
    18.                 limit:10,  //分页的条数  
    19.                 start :1,  //从第一页开始查,limit和start会以两个参数向服务器发送  
    20.                 sorters:[  
    21.                     new Ext.util.Sorter({  
    22.                         property:'name',   //排序的属性  
    23.                         direction:'ASC'    //排序的方式  
    24.                     })  
    25.                 ]  
    26.             }),function(o){  
    27.             var text = o.response.responseText;  
    28.             alert(text);  
    29.             alert(Ext.JSON.decode(text)['name']);  //使用decode编码后获取数据  
    30.         });  
    31.     });  
    32. })();  

    index.jsp:

    <%

    response.getWriter().write("{name:'hanhan313',age:26,email:'605474293@qq.com'}");

    %>

    结果:


    5.     跨域交互的代理JsonP

    [javascript] view plaincopy
    1. (function(){  
    2.     Ext.onReady(function(){  
    3.         Ext.regModel("person",{  
    4.             fields:[  
    5.                 {name:'name',type:'string'}  
    6.             ],  
    7.             proxy:{  
    8.                 type:'jsonp',  
    9.                 url:'http://www.uspcat.com/extjs/person.php'  
    10.             }  
    11.         });  
    12.         var person = Ext.ModelManager.getModel('person');  
    13.         person.load(1,{  
    14.             scope:this,  
    15.             success:function(model){  
    16.                 alert(model.get('name'));  
    17.             }  
    18.         });  
    19.     })  
    20. })();  

    person.php:

    echo Ext.data.Jsonp.callback1({name:”hanhan313”});

  • 相关阅读:
    LeetCode 382. Linked List Random Node
    LeetCode 398. Random Pick Index
    LeetCode 1002. Find Common Characters
    LeetCode 498. Diagonal Traverse
    LeetCode 825. Friends Of Appropriate Ages
    LeetCode 824. Goat Latin
    LeetCode 896. Monotonic Array
    LeetCode 987. Vertical Order Traversal of a Binary Tree
    LeetCode 689. Maximum Sum of 3 Non-Overlapping Subarrays
    LeetCode 636. Exclusive Time of Functions
  • 原文地址:https://www.cnblogs.com/shsgl/p/4344341.html
Copyright © 2011-2022 走看看