从今年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()用于清空缓存内的数据。

dojo 十二 rest的更多相关文章

  1. 前端开发中SEO的十二条总结

    一. 合理使用title, description, keywords二. 合理使用h1 - h6, h1标签的权重很高, 注意使用频率三. 列表代码使用ul, 重要文字使用strong标签四. 图片 ...

  2. CRL快速开发框架系列教程十二(MongoDB支持)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  3. 我的MYSQL学习心得(十二) 触发器

    我的MYSQL学习心得(十二) 触发器 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数 ...

  4. Web 前端开发精华文章推荐(jQuery、HTML5、CSS3)【系列十二】

    2012年12月12日,[<Web 前端开发人员和设计师必读文章>系列十二]和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HT ...

  5. 第十二章Fundamental Data Types 基本数据类型

    目录: 12.1 数值概论 12.2整数 12.3浮点数 12.4 字符和字符串 12.5布尔变量 12.6枚举类型 12.7具名常量 12.8数组 12.9创建你自己的类型 12.1   数值概论 ...

  6. [分享] IT天空的二十二条军规

    Una 发表于 2014-9-19 20:25:06 https://www.itsk.com/thread-335975-1-1.html IT天空的二十二条军规 第一条.你不是什么都会,也不是什么 ...

  7. Bootstrap <基础三十二>模态框(Modal)插件

    模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 如果您想要单独引用该插件的功能,那么您需要引用  ...

  8. Bootstrap <基础二十二>超大屏幕(Jumbotron)

    Bootstrap 支持的另一个特性,超大屏幕(Jumbotron).顾名思义该组件可以增加标题的大小,并为登陆页面内容添加更多的外边距(margin).使用超大屏幕(Jumbotron)的步骤如下: ...

  9. Bootstrap <基础十二>下拉菜单(Dropdowns)

    Bootstrap 下拉菜单.下拉菜单是可切换的,是以列表格式显示链接的上下文菜单.这可以通过与 下拉菜单(Dropdown) JavaScript 插件 的互动来实现. 如需使用下列菜单,只需要在 ...

随机推荐

  1. ReactJS入门

    React介绍 React是facebook开发基于组件驱动开发(CDD ) 的UI类库,相对于双向绑定的类库,如AngularJS,它采用单向数据流绑定.通过采用虚拟DOM的概念,是的他在性能和处理 ...

  2. Class类工具 - ClassUtils.java

    Class类工具,提供操作class类的方法.<br/>比如:获知类.方法上是否有注解,获取类注解,获取某package下所有class等. 源码如下:(点击下载 - ClassUtils ...

  3. Spring Mvc 输出Json(iwantmoon.com出品)

    原文:http://iwantmoon.com/Post/f94e49caf9b6455db7158474bab4c4dd 因为工作需要,现在要去做开放平台,考虑了多种方案之后,基本确定 下来,Htt ...

  4. linux 操作

    正在运行的内核和系统信息 # uname -a # 获取内核版本(和BSD版本) # lsb_release -a # 显示任何 LSB 发行版版本信息 # cat /etc/SuSE-release ...

  5. shader 的 nounroll

    刚刚解决了一个特别坑的问题. 客户有个需求 需要shader里面 loop 的iterator数量 在运行时确定.z 这样对于里面存在  sample的loop就会被force unroll但因为co ...

  6. 利用WiFi钓鱼法追邻居漂亮妹纸

    假设,你的邻居是一个妹纸.漂亮单身,你,技术狗,家穷人丑,集体户口.像借酱油这种老套搭讪方式的成功率对你来说实在很低. 你要做的是了解她,然后接近她.通过搜集更多的情报,为创造机会提供帮助. 初级情报 ...

  7. Eclipse Plugin for Hadoop

    Eclipse 官网下载向导 下载 下载的安装文件放到~/setupEnv,将安装到/opt目录下 cd ~/setupEnv sudo tar zxvf eclipse-java-kepler-SR ...

  8. CKEditor (Toolbar Definition)工具栏自定义配置

    JS是大小写敏感的, 在设置配置文件的时候需要注意 以CKEditor 4为基础我们可以通过两种方式配置CKEditor的工具栏,一种是是通过config.js配置文件设置, 另一种是IN-PAGE方 ...

  9. 《暗黑世界GM管理后台系统》部署+功能说明文档

    http://www.9miao.com/product-10-1073.html <暗黑世界GM管理后台系统>部署+功能说明文档 <暗黑世界GM管理后台系统>部署+功能说明文 ...

  10. NodeJS模块、包、NPM

    1.NodeJS模块        每一个Nodejs都是一个NodeJS模块,包括JS文件,JSON文本文件,二进制模块文件. a.模块的应用               新建一个文件mytest. ...