当保存到indexeddb时,Dexie是否可以使用js类getter/setter?

n7taea2i  于 2022-12-09  发布在  IndexedDB
关注(0)|答案(1)|浏览(203)

当与Dexie/Indexeddb交互时,我以JS类的形式传入数据。这些类上的一些属性通过getter/setter处理,以便我有机会在将数据存储到对象上之前对其进行操作。
Dexie正在将内部属性名称(_when)“按原样”保存到db,而不是使用数据库初始化期间定义的列名通过其getter(when)阅读数据:
plans: "++id, contactId, when, sooner, later",
Dexie IndexedDB table column names
如何指示Dexie使用类getter,而不是直接使用对象属性?
您可能会在此Stackblitz environment中看到我正在处理的代码/问题。

nszi6y05

nszi6y051#

IndexedDB将存储own enumerable properties,并使所有基于原型的属性都是。类getter和setter是基于原型的,因此IndexedDB不会使用它们。要解决此问题,您需要在放置实体时通过一个函数Map实体,并在返回实体之前使用另一个函数将其Map回来。
然而,我认为内部属性通常是您想要存储的内容,原因与它们存储在内存中的原因相同。在您的示例中,_when包含Date对象,但时间已清零。如果时区发生变化,这很容易变成另一个日期,因此最好将其存储为日期字符串,并将内部格式也作为存储在indexedDB中的格式。

相关问题