2013-05-22 3 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]" 

Ie) Я не понимаю, что я поставил ...

Я использую localStorage неправильно?

Как я могу получить то, что я установил?

NB: Я думаю, что детали моей модели 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]" '. Это то же самое, что происходит, когда вы предупреждаете (myObj); '. Вам нужно сериализовать свой объект, чтобы его сохранить. 'JSON' часто подходит для этого, в зависимости от характера данных. –

ответ

6

localStorage может только непосредственно хранить строки, а не объекты - если вы попытаетесь сохранить объект он будет вызывать .toString() на этом объекте, следовательно, [object Object].

Как правило, я рекомендую вам использовать JSON.stringify при вставке объектов и JSON.parse при их получении.

Однако вы должны отметить, что переход через JSON (или любой другой промежуточный формат) не сохранит никакие методы или цепи прототипов, связанные с этим объектом. Объект, который вы получите, будет иметь то же самое значение в качестве вашей модели, но оно не будет be a BackboneModel.

+0

Спасибо, я воссоздал модель Backbone, используя извлеченный JSON. – MdaG

+0

@MdaG great - я подумал, что есть способ воссоздать модель, но не быть пользователем базовой сети, я не знал, что это было. – Alnitak

+0

Это было довольно просто после того, как я понял все .toString(). Я добавил решение к моему вопросу. Благодаря! :) – MdaG

Смежные вопросы