跳至主要內容

数据存储

Thisky大约 2 分钟

数据存储

基本机制介绍

当前机制中,主应用与小卡片数据是相互独立的。
小卡片由卡片机制统一进行存储,但同一个应用的多个卡片是共用一个数据空间的。同一个应用的多个数据理论上是读写的同一份。
开发者可以使用小卡片的localStorage进行简单的数据读写。

而主应用则与小卡片数据天然是隔离的。
主应用与小卡片运行在不同的域下面,所以传统的localStorage实际上两者读写的是不同的作用域。

对于简单的数据,仅限在卡片内使用的,大家可以使用localStorage读写。但如果这些数据您希望同时在主应用中使用。则必须使用我们提供的db接口。
结构示意图如下:
image.png

如何实现数据的交互呢?

在主应用中,我们可以使用tb.db(或者bs.db ,老版本适用)对象进行数据库的读写。此方法也适用于独立窗口模式运行。
当然,如果考虑到主应用不需要和卡片进行交互,只需要在主应用内逻辑自洽。那么也可以使用localStorage进行数据存储。
localStorage在主应用内的表现就是工作台内打开和独立窗口打开数据是一致的。

以下是可供大家参考的示例代码

if(typeof $wujie !='undefined'){
  //在卡片下
    console.log($wujie.props)
    console.log('tb=',tb)
    console.log('全部的数据',await tb.db.allDocs())
    console.log('尝试获取db数据=',await tb.db.get('ab'))

}
if(window.bs){
  //在主应用下
    console.log('主应用模式下')
    bs.db.put({
        _id:'ab'+Date.now(),
        title:'gggg'
    })
}

注意,示例代码中tb已经提供了db对象,而由于历史原因,主应用下tb对象暂时还未提供db,可使用bs的db。
建议大家自行再封装一层,以免后续变化后同步比较麻烦。

除此之外,大家还可以参考db的api手册,使用功能更加丰富的方法。
手册链接