美文网首页前端开发那些事儿每天学一点Vue3
封装webSQL(八)封装 “编辑”

封装webSQL(八)封装 “编辑”

作者: 自然框架 | 来源:发表于2021-08-13 18:06 被阅读0次

一般的需求是,一个表单,要么是添加状态,要么是修改状态,可以实现明确需求。

但是有的时候却不能实现明确是添加还是修改。

这种情况一般出现在一对一的表里面。

主表的记录已经添加了,但是从表的记录未必被添加了。

严格模式下,要保证数据的完整性,在添加主表记录的时候,必要的从表记录也必须一起填上,否则会造成数据不完整。

但是有的时候理想很丰满,但是显示却很骨感。

总之由于种种原因,别想着添加主表的时候,可以一并把从表给添加进去。

那么这时候就需要一种“编辑”状态。

打开表单,如果没有对应的数据,那么就是添加状态,如果有对应的记录,那么就获取记录,变成修改用的表单。

提交的时候,需要做判断,没有记录就是添加,有了记录就是修改。

这个需求,可以用现有的添加和修改来实现,也可以再封装一个操作来实现。

于是又封装了一个 model-mod.js 的服务。

// 引入help
import { addModel, updateModel } from '../../../packages/websql.js'

/**
 * 实现添加、修改服务。如果没有记录则添加;有了就修改。
 * @param {object} userInfo 当前登录人的信息
 * @param {object} help 访问数据库的实例
 * @param {objec} info 服务的 meta
 * @param {object} model 前端提交的 body
 * @returns 返回新添加的记录的ID
 */
export default function add (userInfo, help, info, model, id) {
  return new Promise((resolve, reject) => {
    console.log('\n启动 mod 服务\n')
    help.begin((cn) => {
      // 获取记录
      getModel(help, info, id, cn).then((model1) => {
        // 看看有没有
        if (model1.length === 0) {
          // 添加
          addModel(help, info, model, cn).then((newId) => {
            resolve({ newId })
          }).catch((err) => {
            reject(err) // '添加数据出错!'
          })
        } else {
          // 修改
          updateModel(help, info, model, id, cn).then((count) => {
            resolve({ count })
          }).catch((err) => {
            reject(err) // '修改数据出错!'
          })
        }
      }).catch((err) => {
        reject(err) // '获取一条数据出错!'
      })
    })
  })
}
  • help.begin((cn) => {})
    先启动一个事务,好吧,其实好像也没啥大用处。

  • getModel
    判断有没有记录。

  • addModel
    没有记录的话添加。

  • updateModel
    有记录的话修改。

基本就是这样了。

相关文章

  • 封装webSQL(八)封装 “编辑”

    一般的需求是,一个表单,要么是添加状态,要么是修改状态,可以实现明确需求。 但是有的时候却不能实现明确是添加还是修...

  • 封装webSQL(五)封装 get

    获取记录,看似简单,其实也可以分为很多情况。 根据ID获取一条记录 根据查询条件获取记录 分页获取记录 各种统计查...

  • 封装webSQL(二)封装 insert into

    永远不要手撸SQL SQL要手写吗?当然不是,我们可以根据功能进行各种封装,比如先封装一个添加 model 用的S...

  • 封装webSQL(三)封装 update

    修改语句 这里的修改,特指通过主键ID,修改记录(model),其他修改方式再封装其他函数。 这个更简单,只是多了...

  • 封装webSQL(四)封装 delete

    删除语句 一般项目都有两种删除方式,一种是物理删除,一种是逻辑删除。物理删除就是用 delete 语句,把记录从数...

  • 封装webSQL(一)做个help先

    首先,webSQL并不在HTML的标准内,这里封装 webSQL 主要是为了后端的 MySQL。 因为想在前端做一...

  • 封装webSQL(六)封装 统计和查询

    下一步要做什么呢?要为分页做准备,首先实现统计和查询的功能。 sql 封装 统计功能比较简单,只是需要处理一下查询...

  • 封装webSQL(七)封装 分页和查询

    虽然现在分页的方式多种多样,不像以前只能按页翻,但是基础原理还是一样的。 webSQL的分页比较简单(不考虑性能的...

  • 封装 indexedDB(一)做个help先

    不知道大家有没有发现,我封装了后端的 MySQL,前端的 webSQL,而现在又要对 indexedDB 下手了。...

  • 高级应用--JDBC(二)

    封装JDBC抽取DBUtils JDBC事务 数据库连接池讲解 7.封装JDBC抽取DBUtils 为了使得编辑参...

网友评论

    本文标题:封装webSQL(八)封装 “编辑”

    本文链接:https://www.haomeiwen.com/subject/kakjbltx.html