使用BreezeJS和localStorage进行标签对标签通信
Tab-to-tab communication using BreezeJS and localStorage
我正在使用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);
}
});
我试过听"存储"事件,但一直未能成功运行。我要么仍在不断地更改,要么陷入无限循环。
问题的关键在于,我只是在节省一个计时器;如果我只在用户交互后保存,那么我会避免(大多数)比赛条件。不过,据我所知,"自上次我问你以来,用户没有更改任何内容"。
有人对如何处理这个问题有建议吗?
嗯,由于多种原因,这似乎不容易出现问题,但最主要的原因是,您仍然无法阻止来自具有不同数据集的每个选项卡的并发保存。也就是说,如果你对这两个缓存可能不同步这一事实感到满意,只需使用一些唯一的标识符——
加载中的应用程序中的某个位置-
var stashName = 'stash-everything-' + new Date().getTime();
window.setInterval(function () {
var exportData = manager.exportEntities();
window.localStorage.setItem(stashName, exportData);
}, 5000);
现在,每个选项卡都有一组唯一的数据可供使用。
相关文章:
- 在<页眉>标签
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- iframe正在添加标签,需要删除它们
- 如何自动调整标签的高度以适应内容
- Jquery标签插件粘贴问题
- Twitter引导程序Typeahead-Id&标签
- 如何使用HTML5与UDP套接字通信
- Highcharts-如何在自定义格式化程序中获得默认的y轴标签格式化程序
- Morris.js折线图x轴标签在调整大小后消失
- JavaScript goto 标签如何使用内部循环
- firefox插件和dev/panel之间的通信
- 显示某个用户ID的某个标签的30张Instagram图片
- 标签客户端的设置值
- 谷歌图表显示所有标签
- 如何在图片和边缘之间居中设置标签
- 在Datatables中设置本地化后,需要更改标签文本
- 第二组标签及其内容赢得'默认情况下t加载
- 在谷歌浏览器中,标签之间最快的通信是什么
- 使用BreezeJS和localStorage进行标签对标签通信
- RiotJs:与标签实例通信