2

データを永続化するために backbone + backbone.localStorage を使用していますが、間違った動作をします:

ユーザーと呼ばれる1つの属性を持つモデル設定があります

Settings = Backbone.Model.extend({
    localStorage : new Backbone.LocalStorage('settingsStore')
});
var settings = new Settings();
settings.set({user: 'USERNAME'});
settings.save();

このコードの後、weinre で settings.attributes データを出力すると、次のようになります。

  settings.attributes  
   Object  
   id: "3ac78cfb-ad60-1ab8-8391-f058ae9bfcfb"  
   user: "USERNAME"  
   __proto__: Object

次に、モデルを localStorage に保存し、クリアして、もう一度フェッチします。

settings.save();
settings.clear();
settings.fetch();

問題は、settings.attributes を出力すると、この属性がネストされたオブジェクト内に格納されることです。

   settings.attributes  
   Object  
   0: Object  
       id: "3ac78cfb-ad60-1ab8-8391-f058ae9bfcfb"  
       user: "USERNAME"  
       __proto__: Object  
   __proto__: Object

問題は、変更するためにユーザー名を再度設定すると、次のように新しい属性が追加されることです。

   settings.attributes  
   Object  
   0: Object  
   id: "3ac78cfb-ad60-1ab8-8391-f058ae9bfcfb"  
   user: "USERNAME"  
   __proto__: Object  
   user: "NEWUSER"  
   __proto__: Object 

そして、このモデルを保存して再度フェッチすると、属性に 2 つの新しいオブジェクトが作成されます...そして、毎回成長し続けます。

4

1 に答える 1

2

fguillen link によって与えられた質問に対する答えは、この問題に対する正しい答えを与えます。

正しく保存するには、ハードコードされた「ID」を使用してモデル オブジェクトを作成する必要があります。

これを行った後:

var settings = new Settings({ id: 1 });

save() および fect() メソッドは正しく機能しています。明らかに、2 つの ID を繰り返さないように注意する必要があります...

于 2012-05-17T15:36:40.873 に答える