2012-04-26 60 views
0

我开始接触骨干,我用this localStorage adapter。 这里是我的测试代码:Backbone.js的:麻烦坚持简单的模型来localStorage的

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。 当我检查我的localStorage后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/

+0

即使它是本地存储,您是否尝试过在'fetch'的'success'选项中执行alert? – tkone 2012-04-26 20:31:59

+0

成功触发回调(见上文编辑爵士小提琴) – Myster 2012-04-30 02:44:02

回答

0

@tkone,你的建议正确的答案,我认为。提取是异步的,所以除非你使用jQuery延迟或者在成功回调中设置/保存模型,那么这就是行为。

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(); 
     } 
    }); 
}); 
+0

在这个例子中,如果我刷新页面4次我结束了我在localStorage的4个项目(每个后续verison具有嵌套在以前的版本),在这里我想只是要更新的一个项目。 – Myster 2012-05-06 21:48:25