2011-05-18 18 views
0

我在localStorage的對象,像對象:添加屬性到已存儲在localStorage的

{ 「一」: 「oneone」, 「二」: 「twotwo」}

你得到圖片。

由於某些原因試圖向對象添加更多項目將無法工作。如果我想添加「三」:「threethree」,它忽略了這一點,當我更新Opera蜻蜓的存儲區時,它顯示相同的舊對象,保持不變...

有沒有人知道如何追加到對象上蒼蠅?或者我將不得不追加到我的代碼中的對象的副本,然後清除localStorage中的舊對象,並存儲更新的對象?我可以看到這是唯一的方式,但它似乎可能有點醜陋......想法請! :D

回答

0

我認爲最安全和最乾淨的方法是從localStorage獲取對象,解析它,添加一些數據並將其串化以便存儲。

像你說的,這是一個有點難看,但你可以創建一個函數來做到這一點

function mergeLocalStorage(key, obj){ 
    var newObj = JSON.parse(localStorage.getItem(key)); 
    for (var k in obj){ 
     newObj[k] = obj[k]; 
    } 
    localStorage.setItem(key, JSON.stringify(newObj)); 
    return newObj; 
} 
0

如果這個目標要達成任何顯著的大小,然後不斷地分析和重新字符串化它每一個小變化都將變得效率低下。更好的方法是使用http://rhaboo.org,它在localStorage中存儲大型嵌套對象,但爲每個終端值使用單獨的localStorage條目。所有的魔法都隱藏在這樣的語法下:

var store = Rhaboo.persistent('Some name'); 
store.write('count', store.count ? store.count+1 : 1); 

store.write('somethingfancy', { 
    one: ['man', 'went'], 
    2: 'mow', 
    went: [ 2, { mow: ['a', 'meadow' ] }, {} ] 
}); 
store.somethingfancy.went[1].mow.write(1, 'lawn'); 
console.log(store.somethingfancy.went[1].mow[1]); //says lawn 

順便說一句,我寫了。

相關問題