Lawnchair是一个轻量级的移动应用程序数据持久化存储方案,同时也是客户端JSON文档存储方法,优点是短小,语法简洁,扩展性比较好。

现在做HTML5移动应用除了LocalStorage的兼容性比较好之外,SQL web database以及IndexedDB都处在僵局中,虽然有人叫嚣着“我们应该干掉 LocalStorage API”,但那是后话,现在也没得选择。

Lawnchair有个曾经的官网:http://westcoastlogic.com/lawnchair/,不过这个站点提供的源码版本过时了,而且还有错误。

需要下载的话,最新版本在https://github.com/brianleroux/lawnchair

应用示例【应用的是dom Storage】:

var store = new Lawnchair({name:'testing'}, function(store) {
// 需要保存的对象
var me = {key:'brian'};
// 保存
store.save(me); store.get('brian', function(me) {
console.log(me);
});
});

或者:

var store = Lawnchair({name:'testing'}, function(store) {
// 需要保存的对象
var me = {key:'brian'};
// 保存
store.save(me); store.get('brian', function(me) {
console.log(me);
});
});

因为使用了安全的构造函数,因此两种方法的效果一致。回调函数的第一个参数与返回的的store是同一个对象,在回调函数内部也可以用this代替。

初始化:

var store = new Lawnchair(option,callback);

option默认为空对象,有三个可选属性:

option = {
name://相当于表名
record://
adapter://存储类型
}

callback的第一个参数是当前对象,在回调函数内部也可以用this代替。

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() {});

参数中必须有一个函数作为回调函数,哪怕是空。

save (obj, callback)//保存一个对象
    var store = Lawnchair({name:'table'}, function(store) {
});
store.save({
key:'hust',
name:'xesam_1'
})
store.save({
key:'whu',
name:'xesam_2'
})

创建Lawnchair对象的时候,如果传入的option参数含有name属性,那么会创建一个类似table._index_的数组用来保存索引值。

保存形式为对象,如果传入的对象有key属性,那么key会作为索引值保存,如果没有key属性,则自动生成一个key值,然后保存在table._index_中,上面的例子的操作结果如下图:

batch(array, callback)//保存一组对象

上面的例子改用batch方法就是:

    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']
})

lawnchair.js的核心很小,然后有完善的扩展和插件机制,可以按需加载。自己编写也比较方便,只需要在自己的代码中实现adapter valid init keys save batch get exists all remove nuke方法即可。

HTML5开发——轻量级JSON存储解决方案Lawnchair.js的更多相关文章

  1. 开源的轻量级JSON存储Kinto介绍

    本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2015/12/introducing-kinto Kinto是个提供了同步与分片功能的 ...

  2. 【翻译】HTML5开发——轻量级Web Database存储库html5sql.js

    方式1: html5sql官方网址:http://html5sql.com/ 阅读之前,先看W3C关于WEB Database的一段话: Beware. This specification is n ...

  3. HTML5开发学习:本地存储Web Sql Database

       Web Sql Database,中文翻译作"本地数据库",是随着HTML5规范加入的在浏览器端运行的轻量级数据库.    在HTML5中,大大丰富了客户端本地可以存储的内容 ...

  4. (转)HTML5开发学习(2):本地存储之localStorage 、sessionStorage、globalStorage

    原文:http://www.cnblogs.com/xumingxiang/archive/2012/03/25/2416386.html HTML5开发学习(2):本地存储之localStorage ...

  5. (转)HTML5开发学习(3):本地存储之Web Sql Database

    原文:http://www.cnblogs.com/xumingxiang/archive/2012/03/25/2416386.html HTML5开发学习(3):本地存储之Web Sql Data ...

  6. web前端之html5开发中常用的开发工具

    正所谓“工欲善其事,必先利其器”,对Web开发人员来说,好工具的使用总会给人带来事半功倍的效果.正准备学习HTML5或者已经进行了一段时间的HTML5开发的童鞋,都有必要了解下,HTML5都有哪些开发 ...

  7. 微信开发-ACCESS TOKEN 过期失效解决方案

    微信开发-ACCESS TOKEN 过期失效解决方案 起因:因为access_token的重要性,开发过微信的都知道,但是他有自己的生命周期,官方解释为:"有效期为7200秒",一 ...

  8. HTML5实现本地JSON文件的读写

    参考: 使用HTML5来实现本地文件读取和写入  (FileReader读取json文件,FileSaver.js保存json文件) w3school <input>标签 FileRead ...

  9. JSON(JavaScript Object Notation, JS 对象标记)

    JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言 ...

随机推荐

  1. stylus入门使用方法

    https://segmentfault.com/a/1190000002712872

  2. Ubuntu16.04下Mongodb(离线安装方式|非apt-get)安装部署步骤(图文详解)(博主推荐)

    不多说,直接上干货! 说在前面的话  首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu LTS \n \l r ...

  3. POJ 1691 Painting a Board(状态压缩DP)

    Description The CE digital company has built an Automatic Painting Machine (APM) to paint a flat boa ...

  4. Python 爬虫知识点 - 淘宝商品检索结果抓包分析

    一.抓包基础 在淘宝上搜索“Python机器学习”之后,试图抓取书名.作者.图片.价格.地址.出版社.书店等信息,查看源码发现html-body中没有这些信息,分析脚本发现,数据存储在了g_page_ ...

  5. centos 安装 phalcon

    git clone --depth 1 --branch phalcon-v2.0.3 https://github.com/phalcon/cphalcon.git cd cphalcon/ext ...

  6. centos无法联网解决方法

    1)进入 /etc/sysconfig/network-scripts/ 2)vi 或 vim 打开 ifcfg-eth0(不一定是eth0,这个自己判断了) 3)将 ONBOOT=no 改成 ONB ...

  7. Redhat系列使用ISO或者光盘制作yum本地安装源

    适用系统:redhat系列 示例系统:CentOS 6x86_64 环境:虚拟机   有时候做实验又不能联网的情况下想装一款软件时,经常会搞的头大:难道要去系统镜像中一个个拷出来再用rpm安装?各种依 ...

  8. 《转》python学习--基础下

    转自http://www.cnblogs.com/BeginMan/archive/2013/04/12/3016323.html 一.数字 在看<Python 核心编程>的时候,我就有点 ...

  9. Java三方---->Thumbnailator框架的使用

    Thumbnailator是一个用来生成图像缩略图的 Java类库,通过很简单的代码即可生成图片缩略图,也可直接对一整个目录的图片生成缩略图.有了它我们就不用在费心思使用Image I/O API,J ...

  10. MQTT协议笔记之mqtt.io项目TCP协议支持

    前言 MQTT定义了物联网传输协议,其标准倾向于原始TCP实现.构建于TCP的上层协议堆栈,诸如HTTP等,在空间上多了一些处理路径,稍微耗费了CPU和内存,虽看似微乎其微,但对很多处理能力不足的嵌入 ...