博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js 使用 Lawnchair 存储 json 对象到本地
阅读量:6501 次
发布时间:2019-06-24

本文共 4133 字,大约阅读时间需要 13 分钟。

项目中用到储存点击记录的功能。

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的记录 适当时候调用。

转载于:https://juejin.im/post/5a31d57a51882535c56cec4d

你可能感兴趣的文章
高德开放平台推出LBS游戏行业解决方案提供专业地图平台能力支持
查看>>
追求绿色数据中心
查看>>
Web开发初学指南
查看>>
OpenStack Days China:华云数据CTO郑军分享OpenStack创新实践
查看>>
探寻光存储没落的真正原因
查看>>
高通64位ARMv8系列服务器芯片商标命名:Centriq
查看>>
中国人工智能学会通讯——融合经济学原理的个性化推荐 1.1 互联网经济系统的基本问题...
查看>>
盘点大数据商业智能的十大戒律
查看>>
戴尔为保护数据安全 推出新款服务器PowerEdge T30
查看>>
今年以来硅晶圆涨幅约达40%
查看>>
构建智能的新一代网络——专访Mellanox市场部副总裁 Gilad Shainer
查看>>
《数字视频和高清:算法和接口》一导读
查看>>
《中国人工智能学会通讯》——6.6 实体消歧技术研究
查看>>
如何在Windows查看端口占用情况及查杀进程
查看>>
一分钟秒懂公有云、私有云、混合云......
查看>>
云存储应用Upthere获7700万美元股权债务融资
查看>>
国家互联网应急中心何世平博士主题演讲
查看>>
洗茶,你误会了多少年?
查看>>
移动大数据“后市场”受青睐 亟需数据深度学习人才
查看>>
大数据时代的财务人员须与时俱进
查看>>