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