use*_*506 5 javascript local-storage backbone.js
关于在LocalStorage中使用Backbone.js的一个非常简短的问题:
我在LocalStorage中存储了一系列内容(Backbone集合).当我的网站在多个浏览器窗口/选项卡中打开并且两个窗口中的用户向列表添加内容时,一个窗口的更改将覆盖在另一个窗口中所做的更改.
如果您想亲自尝试,只需使用示例Backbone.js Todo应用程序:
任何建议如何防止这种情况发生,任何标准的方式来处理这个?
Thxx
该问题是众所周知的并发丢失更新问题,请参阅并发控制中丢失更新?。为了您的理解,我可能会建议以下快速而肮脏的修复, file backbone-localstorage.js,Store.prototype.save:
save: function() {
// reread data right before writing
var store = localStorage.getItem(this.name);
var data = (store && JSON.parse(store)) || {};
// we may choose what is overwritten with what here
_.extend(this.data, data);
localStorage.setItem(this.name, JSON.stringify(this.data));
}
Run Code Online (Sandbox Code Playgroud)
对于Backbone localStorage 的最新 Github 版本,我认为应该如下所示:
save: function() {
var store = this.localStorage().getItem(this.name);
var records = (store && store.split(",")) || [];
var all = _.union(records, this.records);
this.localStorage().setItem(this.name, all.join(","));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2741 次 |
| 最近记录: |