【问题标题】:Is it possible to ask Dexie to exclude one or more table properties to be saved in IndexedDB?是否可以要求 Dexie 排除要保存在 IndexedDB 中的一个或多个表属性?
【发布时间】:2018-08-05 07:39:13
【问题描述】:

是否可以在存储中创建表时排除一个或多个属性或将条目保存在 indexeddb 中?

例如下表描述(Typescript)有四个属性,其中只有前三个用于创建和添加新条目:

interface IContact {
  id?: number,
  first: string,
  last: string,
  notInDb: string
}

属性notInDb 在创建表时或添加实例时都不应考虑。 notInDb 仅在实现接口的实际类中使用。

【问题讨论】:

    标签: typescript indexeddb dexie


    【解决方案1】:

    您不能只从要存储的对象中选择某些属性。我猜您想要排除某个属性的原因是它太大或不可结构化克隆。

    indexedDB 使用仅接受某些对象的结构化克隆算法。这基本上是序列化,但不是字符串。因此,您需要设计自己的序列化方法。将所需的属性复制到基本对象中。这听起来像是开销,但实际上并没有那么糟糕。与其尝试存储类本身,不如创建一个 serialize 方法来创建一个基本对象并存储它。创建一个相应的deserialize 方法,该方法接受一个基本对象并从中创建一个类的实例。

    我建议先尝试这种方法。如果您后来发现性能是一个问题,并希望继续使用 indexedDB,那么您可能需要重新考虑您的设计,并围绕 indexedDB 的要求进行设计。

    【讨论】:

      【解决方案2】:

      Indexeddb 将只存储自己的可枚举属性。因此,可以使用 Object.defineProperty() 并将其标记为 {enumerable: false}。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-27
        • 2017-12-03
        • 2021-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多