17

Backbone でJerome の localStorageアダプターを使用していますが、コレクションに最適です。

しかし、保存する必要があるモデルが 1 つあります。したがって、私のモデルでは次のように設定しました。

localStorage: new Store("msg")

次に、保存とフェッチを行います。私の問題は、アプリを更新して初期化するたびに、モデルの新しい表現が localStorage に追加されることです。以下を参照してください。

私は何を間違っていますか?

window.localStorage.msg = {
  // Created after first run
  "1de5770c-1431-3b15-539b-695cedf3a415":{
    "title":"First run",
    "id":"1de5770c-1431-3b15-539b-695cedf3a415"
  },
  // Created after second run
  "26c1fdb7-5803-a61f-ca12-2701dba9a09e":{
    "0":{
      "title":"First run",
      "id":"1de5770c-1431-3b15-539b-695cedf3a415"
    },
      "title":"Second run",
      "id":"26c1fdb7-5803-a61f-ca12-2701dba9a09e"
    }
  }
4

2 に答える 2

29

私は同じ問題に遭遇しました。もしかしたら、これに似たものを持っているかもしれません

var Settings = Backbone.Model.extend({
  localStorage: new Store("Settings"),
  defaults: { a: 1 }
});

var s = new Settings;
s.fetch();

に変更しました

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

localStorage アダプターのような ID のチェック

 case "read":    resp = model.id ? store.find(model) : store.findAll(); break;

so0または""for id は機能せず、すべてのモデルが 1 つで返されます

于 2011-10-21T09:40:57.440 に答える
6

私も backbone.js は初めてですが、永続化モデルはデータベース テーブルに似ているようです。つまり、テーブルからレコードを作成/削除/読み取るように設計されています。localStorage アダプターも同じことを行うので、localStorage に Msg "テーブル" を作成し、毎回新しい Msg "レコード" を作成し、アダプターはそれぞれの新しい Msg に一意の ID を与えます。

オブジェクトが 1 つしかない場合は、localStorage を直接使用する方がおそらく簡単です。API は非常に単純です。

localStorage.setItem("key","value");

localStorage はキーと値のペアのみを文字列として扱うため、文字列形式との間で変換する必要があることに注意してください。

それを行う方法の詳細については、この質問を見てください。

オブジェクトを HTML5 localStorage に保存する

于 2012-03-18T17:11:24.757 に答える