• dojo 十二 rest


    从今年8月份开始一直在做以HTML5+CSS3+Dojo实现前端设计,以REST风格实现后台数据请求的项目研发。实践出真知,现在对研发中用到的技术和遇到的问题做一个总结。


    后台服务没有采用那些主流的框架组合,仅仅采用了resteasy,相应的前端采用Dojo的JsonRestStore进行数据请求。

    var store =newJsonRestStore({target: path});
    store.fetch({
    query: encodeURI(query),
    onComplete:function(items,request){
    /*请求成功后的操作*/
    },
    onError:function(error,request){
    /*请求失败后的操作*/
    }
    });

    target是REST服务的根URL,query是某个指定请求的path+查询条件。
     
    诚然,可以在每个需要请求数据的地方写下上面的代码,在onComplete、onError方法中实现相应的数据处理逻辑。但是,我们有更加深入的考虑。在项目中,有一部分数据在短时间内是不会改变的,对这些数据没有重复请求的必要,可以在第一次请求完成之后将这些数据放入缓存中,下次请求时直接从缓存中获取,而不用访问后台服务。
     
    基于这样的考虑,我们设计了一个数据管理对象DataManager,包括访问数据、缓存数据、清除缓存这些功能,对JsonRestStore的调用做了一个封装。

    declare("util.DataManager",null,{

    //数据{target:"{id} or ?{id=1}",value:object}
    data:null,

    //访问URL::http://localhost:8080/rest
    path:null,

    _init:function(){
    this.data =newMemory({idProperty:"target"});
    },

    //清空缓存数据
    clear:function(){
    var it =this;
    var r = it.data.query({});
    arrayUtil.forEach(r,function(a){
    it.data.remove(a.target);
    });
    },


    //通过条件获取数据[]
    query:function(t/*target,query*/, r/*recall,boolean*/, c/*cache,boolean*/, callback/*function (result) {}*/){
    if(!t || t.replace(" ","")=="")
    callback(null);

    var it =this;
    var a = it.data.get(t);
    if(!r && a){
    callback(a.value);
    }else{
    var store =newJsonRestStore({target: it.path});
    store.fetch({
    query: encodeURI(t),
    onComplete:function(items,request){

    var d =items.data;

    var p =items.path;

    if(c && d){
    it.data.remove(t);
    it.data.add({target:t, value:{data: d, path: p}});
    }
    callback(a.value);

    },
    onError:function(error,request){
    /*请求失败后的操作*/
    }
    });
    }
    }
    });

    如上代码,需要请求数据的地方可调用DataManager.query(),这个方法包括4个参数。
    第一个参数是某个指定请求的path+查询条件,即JsonRestStore中的query。
    第二个参数是Boolean,是否重新请求,如果false,则从缓存中读取而不发送请求;如果true,则总是向后台请求。
    第三个参数是Boolean,是否缓存,如果false不缓存;如果true则缓存。
    第四个参数是回调函数,将数据处理的逻辑放在这里。
    需要缓存的数据放在Memory中。
    DataManager.clear()用于清空缓存内的数据。
  • 相关阅读:
    Pascal Analyzer 4 代码分析使用简要说明
    界面动态配置:持久化反持久化
    (Sql Server)数据的拆分和合并
    javascript中的promise和deferred:实践(二)
    对面向接口编程、按分层建项目的反思和新的分层结构思路
    revel框架教程之权限控制
    等待与通知机制
    实现代码编辑器
    自定义html标签
    javascript生成自定义的arcgis simpletoolbar
  • 原文地址:https://www.cnblogs.com/tiandi/p/3415912.html
Copyright © 2020-2023  润新知