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 中的格式。
与 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 中的格式。