微信小程序+知晓云上手TodoList

深渊向深渊呼唤

开发文档

https://doc.minapp.com/

后台创建

入口 授权 插件版SDK 插件的思路确实很独特,帮用户省去一些配置,比如设定安全服务域名

初始化校验 校验通过 如果看到如上界面,代码校验通过

用户表 通过查看用户表,确实通过wx.BaaS.auth.loginWithWechat()创建了一个用户

CURD

原型 参考文档

https://doc.minapp.com/js-sdk/schema/#wechat-32

报错信息 未建表报错如下:Error: 404: not found 未建字段报错如下:Error: 400: The payload does not match the

数据添加结果 既要建表还要建字段,这跟之前用过的BaaS【LeanCloud Bmob 微信云】都不相同,哪怕是微信云开发,也只是要建好表,保证表存在就可以。

增加数据
// 获取文本框里的内容
const title = e.detail.value
// 如果文本为空,给出toast提示
if (!title) {
  wx.showToast({
    title: '请输入内容'
  })
  return
}
let tableName = 'Todo'
// 通过 `tableName` 实例化一个 `TableObject` 对象,操作该对象即相当于操作对应的数据表
let Todo = new wx.BaaS.TableObject(tableName)
// 本地创建一条空记录
let todo = Todo.create() // todo 为 TableRecord 实例

let item = {
  title: title
}

// 为上面创建的空记录赋值,并保存到服务器,save() 方法返回一个 Promise 对象
todo
  .set(item)
  .save()
  .then(res => {
    console.log(res)
    wx.showToast({
      title: '保存成功'
    })
  })

添加成功后,数据同时返回一份到res.data中,方便二次使用,而不用再去查询一遍数据库。

回显数据

读取数据

返回的数据在res.data.objects中

数据读取 代码如下

loadData() {
 let Todo = new wx.BaaS.TableObject('Todo')
 const query = new wx.BaaS.Query()

 Todo.setQuery(query)
   .find()
   .then(res => {
     // find 方法返回值为一个 Promise
     console.log(res)
     const todos = res.data.objects
     this.setData({
       todos: todos
     })
   })
},
修改数据
edit(e) {
  // 获取input组件上的取值
  const title = e.detail.value
  // 设定currentIndex值
  const index = e.currentTarget.dataset.index
  // 获取原来数据源
  let todos = this.data.todos
  // 修改当前元素的title值
  const recordID = todos[index]._id
  // 更新 tableName 为 'Todo' 的数据表中 id 为 currentId 的数据行的 title 字段
  let tableName = 'Todo'

  let Todo = new wx.BaaS.TableObject(tableName)
  let todo = Todo.getWithoutData(recordID)

  todo.set('title', title)
  todo.update().then(
    res => {
      // success
      wx.showToast({
        title: '修改成功'
      })
      this.loadData()
      this.setData({
        currentIndex: -1
      })
    },
    err => {
      console.log(err)
      // err
    }
  )
},

顺便提一下,如果在js代码中要读取数据对象的属性,直接使用点语法就可以,不必使用.get(),其实也没有.get()方法,这跟之前用的BaaS有所不同

删除
// 删除 tableName 为 'Todo' 的数据表中 recordID 的数据项
let tableName = 'Todo'
let recordID = this.data.todos[item]._id

let Todo = new wx.BaaS.TableObject(tableName)
Todo.delete(recordID).then(
  res => {
    // success
    this.loadData()
    wx.showToast({
      title: '删除成功'
    })
    // checkIndices将它复位
    this.setData({
      checkIndices: []
    })
  },
  err => {
    // err
  }
)

【正文完】

源码

https://gitee.com/laeser/demo-weapp 代码位于pages/todo-zx文件夹下

关注我

mp

栏目