在我的Ember.js应用程序中的localStorage.clear()或deleteRecord()之后,本地存储数据被复活

时间:2013-08-08 19:58:42

标签: ember.js local-storage

我在我的余烬应用中调用localStorage.clear()deleteRecord()jsbin example)后观察数据复活。

按照以下步骤复制问题:

  1. 打开chrome web dev - >资源 - >本地存储 - > “http://jsbin.com
  2. 在此页面上添加一些组织,并观察它们是否已添加到本地存储
  3. 单击“清除本地存储”(案例1)或“删除组织数据”(案例2)并观察本地存储是否已清除。不要刷新页面。 (数据仍保留在页面上,但这没关系,因为我们没有刷新页面。)
  4. 再添加一个组织并观察所有已删除的组织是否已复活(案例1)或LS未被删除(案例2)
  5. 因此,当您刷新页面时,所有删除的数据都会重新显示。
  6. 问题:

    1. 为什么这种数据复活会发生?
    2. 如何清除(手动或调用location.reload)后,localStorage.clear()在没有刷新的情况下工作?
    3. 稍后编辑包含deleteRecord()

2 个答案:

答案 0 :(得分:2)

9月版的Ember Data / Local Storage修复了问题。 See it in action in this SO Answer with a jsbin

在与IRC的人讨论之后,目前LSAdapter或Ember Data中存在导致数据徘徊的错误。

由于Ember Data即将发生变化,问题暂停于2013年8月。

解决此问题的方法是清除本地存储以及余烬数据。 See it working in this jsbin

或者,您可以在清除本地存储后立即致电location.reload()以显示新数据。

答案 1 :(得分:1)

使用clear擦除localStorage可以正常工作。它是本地存储适配器(LSAdapter)保持状态并在创建新记录时重新填充先前清除的localStorage。这样做是因为记录存储在一个字符串中,而LSAdapter不知道你是否已经改变它,所以它总是保存所有记录以确保它被同步。

考虑销毁所有记录,而不是清除localStorage。