收藏
回答

wx.showActionSheet函数中使用this.data.xxx会报错?

请教各位大佬

使用wx.showActionSheet弹出警示框提示用户删除, 点击确认后调试器报错:

"TypeError: Cannot read property 'openId' of undefined"

  // 响应列表左划按钮事件
  async listSlideButtonTap(e) {
    // 得到触发事件的待办序号
    const {
      index
    } = e.detail
    // 根据序号获得待办对象
    const listIndex = e.currentTarget.dataset.index
    const list = this.data.lists[listIndex]
    const db = await getApp().database()
    // 处理删除按钮点击事件
    if (index === 0) {
      wx.showActionSheet({
        alertText: '是否删除列表内所有待办',
        itemColor: 'red',
        itemList: ['确定'],
        success(res) {
          if (!res.cancel) {
            if (res.tapIndex === 0) {
              // 根据待办的 _id 找到并删除待办记录
              db.collection(getApp().globalData.collection_list).where({
                _id: list._id,
                _openid: this.data.openId
              }).remove()
              // 根据待办的 _id 找到并删除待办记录
              db.collection(getApp().globalData.collection_todo).where({
                _openid: this.data.openId,
                list_name: list.list_name
              }).remove()
              // 更新本地数据,快速更新显示
              this.data.lists.splice(listIndex, 1)
              this.setData({
                lists: this.data.lists
              })
            }
          }
        }
      })
    }
  },

去掉wx.showActionSheet函数后,就不报错了

  // 响应列表左划按钮事件
  async listSlideButtonTap(e) {
    // 得到触发事件的待办序号
    const {
      index
    } = e.detail
    // 根据序号获得待办对象
    const listIndex = e.currentTarget.dataset.index
    const list = this.data.lists[listIndex]
    const db = await getApp().database()
    // 处理删除按钮点击事件
    if (index === 0) {
      // TODO: 增加选单动作,this.data.openId报错了???
      // wx.showActionSheet({
      //   alertText: '是否删除列表内所有待办',
      //   itemColor: 'red',
      //   itemList: ['确定'],
      //   success(res) {
      //     if (!res.cancel) {
      //       if (res.tapIndex === 0) {
      db.collection(getApp().globalData.collection_list).where({
        _openid: this.data.openId,
        _id: list._id
      }).remove()
      // 根据待办的 _id 找到并删除待办记录
      db.collection(getApp().globalData.collection_todo).where({
        _openid: this.data.openId,
        list_name: list.list_name
      }).remove()
      // 更新本地数据,快速更新显示
      this.data.lists.splice(listIndex, 1)
      this.setData({
        lists: this.data.lists
      })
      //       }
      //     }
      //   }
      // })
      // 根据待办的 _id 找到并删除待办记录
    }
  },

wx.showActionSheet函数中不能使用this.data.xxx吗?

最后一次编辑于  02-01
回答关注问题邀请回答
收藏

4 个回答

  • 一笑皆春
    一笑皆春
    02-02

    let that = this

    02-02
    有用 1
    回复
  • 拾忆
    拾忆
    02-01

    百度了解一下this作用域

    02-01
    有用 1
    回复 1
    • 大东
      大东
      02-02
      感谢! 通过 var that=this 的方式暂存了this的作用域
      02-02
      回复
  • 原点的原点
    原点的原点
    02-02

    t一般最好在外部重新指向this,养成良好的习惯

    02-02
    有用
    回复
  • 大东
    大东
    02-02

    问题已解决, 参考:

    https://segmentfault.com/a/1190000021610643

    02-02
    有用
    回复
登录 后发表内容