2011-07-19 11 views
7

Backbone.ModelオブジェクトまたはBackbone.Collectionオブジェクトをローカルストレージに保存できません。 問題は、保存するときに属性のみが保存され、その必要がないということです。 私は実際にサンプルのTODOデモで提供されているバックボーン - ローカルストレージを使用しています。バックボーンモデルとコレクションをJSON文字列に保存する

これはJSON.stringify(this.data)を返しますが、私はセットを取得するだけのモデルやコレクションの属性を参照してください私が見たとき、その機能に

save: function() {   
    localStorage.setItem(this.name, JSON.stringify(this.data)); 
} 

を保存しています。属性だけでなく、モデルやコレクションの状態全体を保存するように指定する方法はありますか?

答えて

12

Model.toJSONまたはCollection.toJSONをオーバーライドして、シリアル化するデータを返します。

Model.toJSONだけの属性を返すデフォルト:

toJSON : function() { 
    return _.clone(this.attributes); 
} 

コレクションのtoJSONは、モデルのtoJSONを利用:

toJSON : function() { 
    return this.map(function(model){ return model.toJSON(); }); 
} 
+0

しかし、私は実際には)ないmodel.toJSON(JSON.stringifyを呼んでいるがモデル全体が文字列化されるのではなく、属性だけでなく、 JSON.stringifyがmodel.toJSON()を呼び出さないかぎり? – dchhetri

+2

これがJSON.stringifyの仕組みです。 https://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/JSON/stringify "文字列化されるオブジェクトに値が関数であるtoJSONというプロパティがある場合、toJSONメソッドはJSON文字列化の動作をカスタマイズします。オブジェクトが直列化されると、呼び出されるときにtoJSONメソッドによって返される値がシリアル化されます。 –

+0

ああ、私は参照してください。私はそれを試してみましょう。 – dchhetri

関連する問題