IndexedDb 更改时触发的事件?

Posted

技术标签:

【中文标题】IndexedDb 更改时触发的事件?【英文标题】:Event fired when IndexedDb altered? 【发布时间】:2021-05-18 18:22:27 【问题描述】:

我们使用 DexieJS 作为 IndexedDb 的包装器,并正在寻找一种方法来确定底层数据库架构是否发生变化。最坏的情况是,用户在使用我们的应用程序的过程中删除了一个表或整个数据库(不太可能?当然,但是来吧 - users)。 或者,IndexedDb 是否记录“上次修改”值之类的内容?如果我们只有这些,我们就可以完成这项工作。可订阅的事件会更好,不过...... IndexedDb 或 Dexie 是否支持这样的东西?

【问题讨论】:

【参考方案1】:

架构更改必须通过 IndexedDB 中的版本升级,并且每当架构更改时都会触发一个事件“onversionchange”。 Dexie 在此处描述事件:https://dexie.org/docs/Dexie/Dexie.on.versionchange。

如果您想在 table.clear() 等正常的非架构更改时收到通知,您应该尝试支持跨窗口/工作表观察的 dexie 的最新 alpha 版本 (3.1.0-alpha.8)。请参阅release notes for 3.1.0-alpha.1 或this blog post。在您的情况下,您可能希望观察整个表的任何变化。为此,请使用:

const observable = liveQuery(() => db.yourTable.toArray());

还有一个较低级别的事件,以防您希望只收到通知而不重新查询数据:See this issue comment。

请注意,dexie 只能观察源自使用 dexie 更改数据的代码的更改。它不会对直接进入 indexedDB API 的更改做出反应,因为 DOM API 中没有这样的原生事件。

【讨论】:

谢谢,大卫。很棒的信息,我们很喜欢 Dexie,顺便说一句。最后一段是我们需要的最终答案,很不幸。如果 IndexedDb 可以让我们知道是否有讨厌的用户进入并破坏了我们的数据库,那就太好了。

以上是关于IndexedDb 更改时触发的事件?的主要内容,如果未能解决你的问题,请参考以下文章

当输入的值以编程方式更改时触发更改事件

无法在选择框更改时触发事件

v-model 更改时如何触发事件?

使用indexedDB(翻译)

indexeddb怎么触发onupgradeneeded

表单更改时触发的事件