js 使用 Lawnchair 存储 json 对象到本地

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

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

你可能感兴趣的:(js 使用 Lawnchair 存储 json 对象到本地)