17

我将Jerome 的 localStorage适配器与 Backbone 一起使用,它非常适合收藏。

但是,现在我有一个需要保存的模型。所以在我的模型中我设置:

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;

so 0or ""for id 不起作用,它将返回所有模型

于 2011-10-21T09:40:57.440 回答
6

我也是backbone.js 的新手,但看起来持久性模型类似于数据库表。也就是说,它旨在从表中创建/删除/读取记录。localStorage 适配器做同样的事情,所以你在那里做的是在 localStorage 中创建一个 Msg“表”,并且每次创建一个新的 Msg“记录”,并且适配器给每个新的 Msg 一个唯一的 id。

如果你只有一个对象,直接使用 localStorage 可能更容易。API 非常简单:

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

请记住,localStorage 仅将键/值对作为字符串处理,因此您需要转换为字符串格式/从字符串格式转换。

看看这个问题,了解更多关于这样做的信息:

在 HTML5 localStorage 中存储对象

于 2012-03-18T17:11:24.757 回答