使用BreezeJS和localStorage进行标签到标签的通信

时间:2014-10-01 09:16:14

标签: javascript breeze

我正在使用BreezeJS并在本地存储中存储/恢复数据。那工作得很好。用户打开多个选项卡时会出现此问题。每个标签中的更改互相破坏。应在标签之间同步更改。

注意:BreezeJS将负责合并更改,我只需要处理选项卡之间的竞争条件。

var stashName = 'stash_everything';

window.setInterval(function () {
    var exportData = manager.exportEntities();
    window.localStorage.setItem(stashName, exportData);
}, 5000);

addEvent(window, 'storage', function (event) {
  if (event.key == stashName) {
    var importData = window.localStorage.getItem(stashName);
    manager.importEntities(importData);
  }
});

我已经尝试过收听'存储'事件了,但我无法让它成功运行。我要么仍然改变,要么进入无限循环。

问题的症结在于我只是在节省时间;如果我只是在用户互动后保存,那么我会避免(大多数)竞争条件。自从我上次问你“微风吹拂”以来,没有'用户改变过任何东西,据我所知。

有没有人就如何处理此问题提出建议?

1 个答案:

答案 0 :(得分:0)

嗯,这似乎并不是因为出于多种原因而出现问题,但主要原因是你仍然不会阻止来自不同数据集的每个标签的并发保存。话虽这么说,如果你对两个缓存可能不同步的事实感到满意,那就使用一些唯一的标识符 -

加载时应用中的某处 -

var stashName = 'stash-everything-' + new Date().getTime();

window.setInterval(function () {
    var exportData = manager.exportEntities();
    window.localStorage.setItem(stashName, exportData);
}, 5000);

现在每个标签都有一组独特的数据可供使用。