Dexie保存到indexeddb时可以尊重js class getter/setters吗?

Can Dexie respect js class getter/setters when saving to indexeddb?

与 Dexie/Indexeddb 交互时,我将数据作为 JS classes 传递。这些 classes 的一些属性通过 getters/setters 处理,让我有机会在存储到对象之前操作数据。

Dexie 正在“按原样”将内部 属性 名称 (_when) 保存到数据库,而不是通过它的 getter (when) 读取数据,使用数据库初始化期间定义的列名:

plans: "++id, contactId, when, sooner, later",

Dexie IndexedDB table column names

如何指示 Dexie 使用 class getters,而不是直接使用对象属性?

您可能会看到我正在做的 code/problem Stackblitz environment

IndexedDB 将存储 own enumerable properties 并让所有基于原型的属性成为。 Class getter 和 setter 是基于原型的,因此 IndexedDB 不会使用它们。要解决此问题,您需要在放置实体时通过函数映射实体,并在返回实体之前使用另一个函数将它们映射回去。

但是,我认为内部属性通常是您想要存储的内容,原因与将它们存储在内存中的原因相同。在您的情况下, _when 包含时间归零的 Date 对象。如果时区发生变化,这很容易成为另一个日期,因此最好将其存储为日期字符串,并让该内部格式也成为存储在 indexedDB 中的格式。