zoukankan      html  css  js  c++  java
  • ExtJS4.2学习(6)——基础知识之proxy篇

    本次讨论下数据代理,其实个人第一次听到这个短语的时候,并不是特别的适应,在英语中的含义是proxy,其实如若大家也觉得不适应的话,就直接称呼proxy吧。

    在ExtJS中,proxy是进行数据读写的主要途径,可以通过proxy操作数据进行增删改查。

    通过网上查阅一些资料得知,proxy共分为两大类,分别如下:

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

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

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

    Ext.data.proxy.SessionStorage 浏览器级别代理----[重点]

    Ext.data.proxy.LocalStorage 本地化的级别代理cookie(不能跨浏览器)----[重点]

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

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

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

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

    一、普通的内存代理示例

    (function(){
    Ext.onReady(function(){
    Ext.regModel("user",{
    fields:[
    {name:'name',type:'string'},
    {name:'age',type:'int'}
    ]
    });
    //不用create方法 我们直接用proxy来创建对象数据
    var userData = [
    {name:abc',age:1},
    {name:'hello',age:26}
    ];
    //创建model的代理类
    var memoryProxy = Ext.create("Ext.data.proxy.Memory",{
    data:userData,
    model:'user'
    })
    userData.push({name:'hi',age:1});
    //update
    memoryProxy.update(new Ext.data.Operation({
    action:'update',
    data:userData
    }),function(result){},this);
    //就可以做增删改查了
    memoryProxy.read(new Ext.data.Operation(),function(result){
    var datas = result.resultSet.records;
    Ext.Array.each(datas,function(model){
    alert(model.get('name'));
    })
    });
    });
    })();

    二、浏览器级别代理(session级别代理)

    (function(){
    Ext.onReady(function(){
    Ext.regModel("user",{
    fields:[
    {name:'name',type:'string'}
    ],
    proxy:{
    type:'sessionstorage',
    id  : 'twitter-Searches'
    }
    });
    //我们用store来初始化数据
    var store = new Ext.data.Store({
    model:user
    });
    store.add({name:'na'});
    store.sync();
    store.load();
    var msg = [];
    store.each(function(rec){
    msg.push(rec.get('name'));
    });
    alert(msg.join("
    "));
    })
    })();

    三、本地化级别代理(local级别代理)

    (function(){
    Ext.onReady(function(){
    Ext.regModel("user",{
    fields:[
    {name:'name',type:'string'}
    ],
    proxy:{
    type:'localstorage',
    id  : 'twitter-Searches'//全局唯一的
    }
    });
    //我们用store来初始化数据
    var store = new Ext.data.Store({
    model:user
    });
    store.add({name:'hello'});
    store.sync();
    store.load();
    var msg = [];
    store.each(function(rec){
    msg.push(rec.get('name'));
    });
    alert(msg.join("
    "));
    })
    })();

    四、异步加载的方式代理(ajax方式代理)

    (function(){
    Ext.onReady(function(){
    Ext.regModel("person",{
    fields:[
    {name:'name',type:'string'}
    ]
    });
    var ajaxProxy = new Ext.data.proxy.Ajax({
    url:'person.jsp',
    model:'person',
    reader:'json',
    limitParam : 'indexLimit'//将键值对的键改掉名称
    });
    ajaxProxy.doRequest(new Ext.data.Operation({
    action:'read',
    limit:10,
    start :1,
    sorters:[
    new Ext.util.Sorter({
    property:'name',
    direction:'ASC'
    })
    ]
    }),function(o){
    var text = o.response.responseText;
    alert(Ext.JSON.decode(text)['name']);//从字符串编程js对象
    });
    });
    })();

    五、跨域交互的代理

    上边也说到跨域是有严重的安全隐患的,ExtJS的跨域需要服务器端相应的配合;

    基本原理是在你的html中写入一段js脚本,src的来源不再是本域,而是跨域的来源,回调的函数是发送过来的函数

    (function(){
    Ext.onReady(function(){
    Ext.regModel("person",{
    fields:[
    {name:'name',type:'string'}
    ],
    proxy:{
    type:'jsonp',
    url:'abc.jsp'
    }
    });
    var person = Ext.ModelManager.getModel('person');
    person.load(1,{
    scope:this,
    success:function(model){
    alert(model.get('name'));
    }
    });
    });
    })();

  • 相关阅读:
    python出现import _socket ImportError: DLL load failed: %1 不是有效的 Win32 应用程序问题
    python 从字符串中解析xml
    python快速上手-让繁琐工作自动化之超级秒表,解决判断输入为回车以及时间相减
    python利用socket模块,写一个最最简单的tcp通信
    centOS7运行qt程序出现error: #error "Qt requires C++11 support
    Ubuntu下面QT编译报错: 错误 :-1: error: collect2: ld 返回 1
    Ubuntu环境,qt creator中,出现Cannot run compiler 'g++' Maybe you forgot to setup the environment解决方案
    电脑屏幕自动随背景变化解决方法
    Linux QT Kit丢失Version为空?
    Django signal 信号量
  • 原文地址:https://www.cnblogs.com/sunyingyuan/p/3686278.html
Copyright © 2011-2022 走看看