我们使用DexieJS作为IndexedDb的包装器,并正在寻找一种方法来确定底层DB模式是否发生了变化。最糟糕的情况是,这是一个用户在使用我们的应用程序的过程中删除一个表或整个DB (不可能吗?当然,但是来吧-用户)。
或者,IndexedDb会记录类似“最后修改”的值吗?如果我们只有这些,我们就能做到这一点。可能的事会更好,尽管.IndexedDb或Dexie支持这样的东西吗?
发布于 2021-02-15 22:01:39
模式更改必须在IndexedDB中进行版本升级,并且每当模式被更改时都会触发一个事件"onversionchange“。Dexie在这里描述这个事件:https://dexie.org/docs/Dexie/Dexie.on.versionchange。
如果您希望收到table.clear()这样的正常非模式更改的通知,那么您应该尝试支持跨窗口/工作者表观察的最新alpha版本的dexie (3.1.0-字母8)。见3.1.0-字母1的发行说明或这篇博客文章。在您的示例中,您可能希望观察整个表上的任何更改。要做到这一点,请使用:
const observable = liveQuery(() => db.yourTable.toArray());另外还有一个较低级别的事件,如果您希望在不请求数据的情况下得到通知:见本问题评论。
请注意,dexie只能观察来自代码的更改,这些代码使用dexie来修改数据。它不会对直接到indexedDB API的更改做出反应,因为DOM中没有这样的原生事件。
https://stackoverflow.com/questions/66215243
复制相似问题