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方法即可。
轉載請注明來自小西山子【http://www.cnblogs.com/xesam/】
本文地址:http://www.cnblogs.com/xesam/archive/2012/03/01/2370307.html
