【问题标题】:backbone.js: trouble persisting simple Model to localStorageBackbone.js:将简单模型持久保存到 localStorage 时遇到问题
【发布时间】:2012-04-26 03:09:11
【问题描述】:

我开始使用骨干网,我使用了this localStorage adapter。 这是我的测试代码:

cartStatus = Backbone.Model.extend({
    localStorage: new Store("cartStatus"),
    currentClientId: ""
});

var myStatus = new cartStatus;

$(function () {
    myStatus.fetch();
    alert("loaded" + myStatus.get("currentClientId"));
    myStatus.set({ "currentClientId": "abc" });
    myStatus.save();
});

如果我多次加载页面,它每次都会显示loaded: undefined。 但是,在我第二次加载之后,我每次都期望loaded: abc。 当我在 2 次加载后检查我的本地存储时,我看到了这个:

cartStatus-d2a7b64d-2f15-a741-9a8c-e254b4a13682 {"0":{"currentClientId":"abc","id":"dd5e0e47-9356-ea30-2de3-75a041848b88"},"currentClientId":"abc","id":"d2a7b64d-2f15-a741-9a8c-e254b4a13682"}
cartStatus dd5e0e47-9356-ea30-2de3-75a041848b88,d2a7b64d-2f15-a741-9a8c-e254b4a13682
cartStatus-dd5e0e47-9356-ea30-2de3-75a041848b88 {"currentClientId":"abc","id":"dd5e0e47-9356-ea30-2de3-75a041848b88"}

有人知道怎么回事吗?

编辑
我创建了一个 jsfiddle 来演示这个(运行两次)http://jsfiddle.net/Myster/fE9eQ/3/

【问题讨论】:

  • 即使是本地存储,您是否尝试过在success 选项中为fetch 设置警报?
  • 触发成功回调(见上面编辑中的js fiddle)

标签: backbone.js


【解决方案1】:

@tkone,您提出了我认为的正确答案。获取是异步的,因此除非您使用 jquery deferreds 或在成功回调中设置/保存模型,否则这将是行为。

cartStatus = Backbone.Model.extend({
    localStorage: new Store("cartStatus"),
    currentClientId: ""
});

var myStatus = new cartStatus();

$(function () {
    debugger;
    myStatus.fetch({
        success: function(x) {
            document.write('myStatus.fetch - success !<br />');
            myStatus.set("currentClientId", "abc" );
            myStatus.save();
        }
    });
});

【讨论】:

  • 在这个例子中,如果我刷新页面 4 次,我最终在我的 localStorage 中有 4 个项目(每个后续版本都嵌套了以前的版本),我只想更新一个项目.
猜你喜欢
  • 1970-01-01
  • 2011-09-17
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
  • 2014-06-06
  • 1970-01-01
  • 2013-02-24
  • 1970-01-01
相关资源
最近更新 更多