gpt4 book ai didi

javascript - backbone.js 和具有多个浏览器选项卡/窗口的本地存储会覆盖数据

转载 作者:数据小太阳 更新时间:2023-10-29 06:03:04 25 4
gpt4 key购买 nike

只是一个关于将 Backbone.js 与 LocalStorage 一起使用的非常简短的问题:

我在 LocalStorage 中存储了一个事物列表(主干集合)。当我的网站在多个浏览器窗口/选项卡中打开并且两个窗口中的用户都向列表中添加内容时,一个窗口的更改将覆盖另一个窗口中所做的更改。

如果您想自己尝试,只需使用示例 Backbone.js Todo 应用:

  1. 打开http://backbonejs.org/examples/todos/index.html在两个浏览器选项卡中
  2. 在第一个选项卡中添加项目“item1”,在第二个选项卡中添加“item2”
  3. 刷新两个选项卡:“item1”将消失,您将只剩下“item2”

关于如何防止这种情况发生的任何建议,任何处理这种情况的标准方法?

谢谢

最佳答案

该问题是众所周知的并发丢失更新问题,请参阅 Lost update in Concurrency control? .只是为了您的理解,我可能会建议以下快速而肮脏的修复,文件 backbone-localstorage.jsStore.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));
}

对于latest Github version of Backbone localStorage ,我认为这应该是这样的:

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(","));
}

关于javascript - backbone.js 和具有多个浏览器选项卡/窗口的本地存储会覆盖数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10927436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com