2013-05-22 11 views
1

考慮以下代碼:爲什麼我在localStorage中設置的與我所得到的不一樣?

myObj = new BackboneModel({'a_key': {'c_key': c_val, 'd_key': d_val}, 'b_key': b_value}); 
localStorage.setItem('myObj', myObj); 

現在,如果我使用Chrome開發者工具來檢查我得到這個數據:

> myObj 
r {cid: "c1", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…} 
> localStorage 
Storage {myObj: "[object Object]"} 
> myObj.get('a_key') 
Object {c_key: Object, d_key: Object} 
> localStorage.getItem('myObj') 
"[object Object]" 

即)我不明白我的設置...

我是否正確使用localStorage?

我怎樣才能得到我所設定的?

注:我認爲我的backbone.js模型的細節在這裏是不相關的。

解決

// Set 
var objDict = {'a_key': {'c_key': c_val, 'd_key': d_val}, 'b_key': b_value}; 
myObj = new BackboneModel(objDict); 
localStorage.setItem('myObj', objDict); 
... 
// Get 
var objDict = JSON.parse(localStorage.getItem('myObj')); 
myObj = new BackboneModel(objDict); 
+3

'localStorage'只能存儲字符串,所以你的對象被轉換成它的'.toString()'值,它是''[object Object]''。這與alert(myObj);'時發生的事情是一樣的。你需要序列化你的對象來存儲它。 「JSON」通常適用於此,具體取決於數據的性質。 – 2013-05-22 12:10:02

回答

6

localStorage只能直接存儲字符串,而不是對象 - 如果你試圖存儲一個對象,它會調用.toString()那個對象上,因此[object Object]

正常情況下,我建議你在插入對象時使用JSON.stringify,在檢索時使用JSON.parse

但是,您應該注意,通過JSON(或任何其他中間格式)不會保留與該對象關聯的任何方法或原型鏈。您獲取的對象將與您的模型具有相同的內容,但它不會是 a BackboneModel

+0

謝謝,我使用檢索的JSON重新創建了Backbone模型。 – MdaG

+0

@MdaG太棒了 - 我想有一種方法來重新創建模型,但不是一個骨幹用戶我自己,我不知道它是什麼。 – Alnitak

+0

在瞭解整個.toString()之後,它非常簡單。我在我的問題中添加了解決方案。謝謝! :) – MdaG

相關問題