【问题标题】:Can Dexie respect js class getter/setters when saving to indexeddb?Dexie 在保存到 indexeddb 时可以尊重 js 类 getter/setter 吗?
【发布时间】:2021-03-15 04:12:13
【问题描述】:

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

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

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

Dexie IndexedDB table column names

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

您可能会在 Stackblitz environment 中看到我正在处理的代码/问题。

【问题讨论】:

    标签: javascript class indexeddb dexie


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢您的建议!我会探索你的建议,看看更多地使用between,而不是试图杀死自己不必要地规范化日期对象。
    猜你喜欢
    • 2018-09-13
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 2020-03-30
    • 2016-05-22
    • 1970-01-01
    相关资源
    最近更新 更多