项目中用到储存点击记录的功能。
Lawnchair是一个轻量级的移动应用程序数据持久化存储方案,同时也是客户端JSON文档存储方法,优点是短小,语法简洁,扩展性比较好。 现在做HTML5移动应用除了LocalStorage的兼容性比较好之外,SQL web database以及IndexedDB都处在僵局中,虽然有人叫嚣着“我们应该干掉 LocalStorage API”,但那是后话,现在也没得选择。 Lawnchair有个曾经的官网:http://westcoastlogic.com/lawnchair/,不过这个站点提供的源码版本过时了,而且还有错误。 需要下载的话,最新版本在https://github.com/brianleroux/lawnchair
###其API汇总 keys (callback) //返回存储对象的所有keys
save (obj, callback)//保存一个对象
batch(array, callback)//保存一组对象
get (key|array, callback)//获取一个或者一组对象,然后调用callback处理
exists (key, callback)//检查是否存在key,并将结果的布尔值(true/false)传递给callback函数
each(callback)//遍历集合,将(对象,对象索引)传递给callback函数
all (callback)//将所有对象放在一个数组返回
remove (key|array, callback)//移除一个或者一组元素。
nuke (callback)//销毁所有
###初始化方法 参数中必须有一个函数作为回调函数,哪怕是空。
var store = new Lawnchair({name:'test'}, function() {});或者var store = new Lawnchair(function() {});复制代码
###option默认为空对象,有三个可选属性
option = { name://相当于表名 record:// adapter://存储类型}复制代码
###save (obj, callback)//保存一个对象
保存形式为对象,如果传入的对象有key属性,那么key会作为索引值保存,如果没有key属性,则自动生成一个key值,然后保存在table._index_中
var store = Lawnchair({name:'tableName'}, function(store) { });store.save({ key:'hust', name:'xesam_1' })store.save({ key:'whu', name:'xesam_2' })复制代码
###batch(array, callback)//保存一组对象 效果同上
var store = Lawnchair({name:'table'}, function(store) { });store.batch([{ key:'hust', name:'xesam_1' },{ key:'whu', name:'xesam_2' }])复制代码
###exists (key, callback)//检查是否存在key,并将结果的布尔值(true/false)传递给callback函数
store.exists('whu',function(result){ console.log(result);//true})store.exists('test',function(result){ console.log(result);//false})复制代码
###get (key|array, callback)//获取一个或者一组对象,然后调用callback处理
store.get('hust',function(result){ console.log(result);//{key:'hust',name:'xesam_1'} })复制代码
###all (callback)//将所有对象放在一个数组返回
store.all(function(result){ console.log(result);//[{key:'hust',name:'xesam_1'},{key:'whu',name:'xesam_2'}] })复制代码
###each(callback)//遍历集合,将(对象,对象索引)传递给callback函数
store.each(function(result){ console.log(result); //{key:'hust',name:'xesam_1'} // {key:'whu',name:'xesam_2'} })复制代码
###remove (key|array, callback)//移除一个或者一组元素。
store.remove('whu',function(){ store.all(function(result){ console.log(result)//[{key:'hust',name:'xesam_1'}] }); })复制代码
###nuke (callback)//销毁所有
store.nuke(function(){ store.all(function(result){ console.log(result)//[] }); })复制代码
###keys (callback) //返回存储对象的所有keys
store.keys(function(result){ console.log(result)//['hust','whu'] })复制代码
##笔者项目为例 新建一个浏览记录的管理者的js文件 代码实现
var haveReadResumeTableName = 'haveReadResumeTableName'function getHaveReadResumeTableManager() { return new Lawnchair({name: haveReadResumeTableName}, function(store) {});}//清除30天前的查看记录function cleanBeforeThirtyDaysResumes() { var claerReadResumeHistoryDay = localStorage.claerReadResumeHistoryDay; if(claerReadResumeHistoryDay){ try{ if(getCurrentDate() == claerReadResumeHistoryDay){ return; } }catch(e){ //TODO handle the exception } } localStorage.claerReadResumeHistoryDay = getCurrentDate(); var manager = getHaveReadResumeTableManager(); var beforeThirtyDays = getAfterDay(-30); manager.each(function(resume,keyo) { if(resume.SAVETIME < beforeThirtyDays) { manager.remove(resume.RESUMEID, function() {}); } });}复制代码
查看简历的时候储存简历信息,SAVETIME 对应的是储存的日期。该记录只会保留30天。
//保存简历到本地 function saveThisResumeToLoactionWithResumeAndTime(resumeId, nowTime) { var store = getHaveReadResumeTableManager(); // 需要保存的对象 var resume = { key: resumeId, RESUMEID: resumeId, SAVETIME: nowTime }; // 保存 store.save(resume); }复制代码
批量搜索简历 得到数据后判断简历是否在查看记录里面,已查看会做相应的标示。
var resumeManager = getHaveReadResumeTableManager(); for(var i = 0, len = list.length; i < len; i++) { var resume = list[i]; var li = document.createElement('li'); //判断是否查看过此简历 var haveReadret = false; resumeManager.exists(resume.RESUMEID, function(haveRead) { haveReadret = haveRead; });复制代码
清除30的记录 适当时候调用。